《Java并发编程实战》并发编程实践》哪本比较好

2023-03-04 22:03

满意答案

1)  System.out.println(list);
2) [Hello,Java,Learn,World] 
3)改第一句List list=new LinkedList();

1. ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
2. 对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
3. 对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
4. ArrayList的空间浪费主要体现在在list列表的结尾预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗相当的空间。
4)Vector list=new Vector();
1.  Vectors是可同步化的,意思就是说,任何操作Vector的内容的方法都是线程安全的,相反的,另一方面,ArrayList是不可同步化的,所以也不是线程安全的。
2. 不管是ArrayList还是Vector,在它们内部都是使用一个数组来保存数据的。开发过程中,在使用它们任何一个的时候,你都需要记住这一点。你在往一个ArrayList或者Vector里插入一个元素的时候,如果内部数组空间不够了,ArrayList或者Vector就要扩展它的大小。Vector在默认情况下是增长一倍的大小,而ArrayList增加50%的大小。

其他回答

javaapi中所用的集合类,都是实现了collection接口,他的一个类继承结构如下:

collection<--list<--vector

collection<--list<--arraylist

collection<--list<--linkedlist

collection<--set<--hashset

collection<--set<--hashset<--linkedhashset

collection<--set<--sortedset<--treeset

vector:基于array的list,其实就是封装了array所不具备的一些功能方便我们使用,它不可能走入array的限制。性能也就不可能

超越array。所以,在可能的情况下,我们要多运用array。另外很重要的一点就是vector“sychronized”的,这个也是vector和

arraylist的唯一的区别。

arraylist:同vector一样是一个基于array上的链表,但是不同的是arraylist不是同步的。所以在性能上要比vector优越一些,但

是当运行到多线程环境中时,可需要自己在管理线程的同步问题。

linkedlist:linkedlist不同于前面两种list,它不是基于array的,所以不受array性能的限制。它每一个节点(node)都包含两方

面的内容:1.节点本身的数据(data);2.下一个节点的信息(nextnode)。所以当对linkedlist做添加,删除动作的时候就不用像

基于array的list一样,必须进行大量的数据移动。只要更改nextnode的相关信息就可以实现了。这就是linkedlist的优势。

list总结:

1.所有的list中只能容纳单个不同类型的对象组成的表,而不是key-value键值对。例如:[tom,1,c];

2.所有的list中可以有相同的元素,例如vector中可以有[tom,koo,too,koo];

3.所有的list中可以有null元素,例如[tom,null,1];

4.基于array的list(vector,arraylist)适合查询,而linkedlist(链表)适合添加,删除操作。

hashset:虽然set同list都实现了collection接口,但是他们的实现方式却大不一样。list基本上都是以array为基础。但是set则是

在hashmap的基础上来实现的,这个就是set和list的根本区别。hashset的存储方式是把hashmap中的key作为set的对应存储项。
import java.util.*;

public class TestList {
	public static void main(String args[]) {
		List list = new ArrayList();
		list.add("Hello");
		list.add("World");
		list.add(1, "Learn");
		list.add(1, "Java");
		printList(list);
	}

	public static void printList(List list) {
		for(Object item : list){
			System.out.println((String)item);
		}
	}
}Hello

Java

Learn

World
3、ArrayList  换 为  LinkedList

import java.util.*;

public class TestList {
	public static void main(String args[]) {
		List list = new LinkedList();
		list.add("Hello");
		list.add("World");
		list.add(1, "Learn");
		list.add(1, "Java");
		printList(list);
	}

	public static void printList(List list) {
		for(Object item : list){
			System.out.println((String)item);
		}
	}
}ArrayList和LinkedList都是属于List,List是接口,ArrayList和LinkedList是两个实现类,所以这两个类的功能是一样的。ArrayList是用数组实现的,适合随机访问比较多的情况。  LinkedList是用链表实现的,适合增加删除节点比较多的情况。


vector
import java.util.*;

public class TestList {
	public static void main(String args[]) {
		List list = new Vector();
		list.add("Hello");
		list.add("World");
		list.add(1, "Learn");
		list.add(1, "Java");
		printList(list);
	}

	public static void printList(List list) {
		for(Object item : list){
			System.out.println((String)item);
		}
	}
}Vector也是List一个实现类。不过, Vector现在应该没人用了。Vector也是基于数组实现, 之前应该是用于多线程中的,因为它的很多方法都用了synchronized限制。所以在多线程中,它应该是安全的。 但是后来Jdk中有了专门用于多线程的List,如:CopyOnWriteArrayList或者阻塞队列等。Vector这个类在多线程的速度不好,而且名字也很蛋疼,所以就应该不用了。

相关问答

更多

Java集合类题目

要写一个程序,首先要考虑的是,有几个实体,每个实体的属性是什么。 你这个有,学生,课程,成绩3个。 然后各个属性你都说了。然后先把这3个实体类写出来。 student 类, { Integer ID; //学号 String name; int age; ... list course; 课程集合 } Course 类 { Integer id; 课程号。 String name; list S_id; 学习,本课程的学生集合。 } 成绩 类 { integer id; int type; 成绩的...

java集合类

呵呵,这个是由于泛型导致的错误,Vector v = new Vector();在5.0以后都进行了重新的构造,变成了泛型类,也就是说你在使用的时候需要加上 Vector<Integer> v = new Vector<Integer>(); 这样在以后addElement的时候就只能添加integer类型的数据了,不过程序不会出现错误,只会给你一个警告,关系不大,你可以在main前面加上去处警告的annotation,给你修改一下 @SuppressWarnings("unchecked") p...

java集合类问题

1) System.out.println(list); 2) [Hello,Java,Learn,World] 3)改第一句List list=new LinkedList(); 1. ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 2. 对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。 3. 对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移...

怎么才能了解JAVA集合类?集合类是什么?

数组是集合的一种,是集合的一个子集,你理解了数组就理解了集合. 理解集合类 集合类存放于java.util包中。 集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象就是指集合中对象的引用(reference)。 集合类型主要有3种:set(集)、list(列表)和map(映射)。 (1)集 集(set)是最简单的一种集合,它的对象不按特定方式排序,只是简单的把对象加入集合中,就像往口袋里放东西。 对集中成员的访问和操作是通过集中对象的引用进行的,所以集中不能有重复对象。...

java中集合、集合类和集合框架是什么意思?

都是在讲集合,就全是和集合有关的。。。。。框架也就是某些类的全称。。。。 集合是说拥有集合属性的定义 集合类,是一些实现类。。。。。

JAVA 关于集合类有什么用?

你就需要每种动物定义一个类来描述。 当你定义完全部的动物后,你可能就会发现,其他每种动物都有名称,年龄.只是每种东西喜欢的食物不一样。 这个时候你就会进行提前,把所有动物的共性提取出来,放在一个类中 class BaseAnimal{ String name; int age; public void like() { //在这里一般会根据需要将,将实现比较有代表性的行为封装在Base中。 } } 然后你就可以定义Dog class Dog extends BaseAnimal{ public v...

对于集合类的操作的java代码实现的方法

//我用集合框架的老大跟子类ArrayList给你写个例子 import java.util.*; public class CollectionDemo{ public static void main(String[] args){ Collection c = new ArrayList(); //增加 c.add("Java01"); c.add("Java02"); //删除0角标的值 c.remove(0); //排序 为了方便,我把集合框架转成了String[]数组 String[]...

java容器类和集合类是一个概念吗?

容器是指放东西的物品,在JAVA里面也是这样的,比如 list 是可以用来放对象的列表 你也可以自定义一些类来放其它对象,那么,你定义的这个类就是其它对象的容器。 集合是一组可变数量的数据项,集合的种类包括列表,集,多重集,树和图,通俗地讲就是这么一堆东西。

java框架集合类怎么学

先了解一下集合类的一个整体的架构 比如collection下面两个接口 list set list下面主要有三个实现ArrayList linkedList vector ,set下面主要有hashSet 而map则是另一个包下的 属于集合框架 map下面有HashMap实现 然后 通过不同的对比 了解他们的特点 使用的场合 (互相对比) ArrayList---vector(区别) arrayList 是异步 vector是同步 异步(一个人在对这个集合进行操作时 同时另外一个人 也可以对他进行...

JAVA的集合框架中有那些类,他们都有那些区别

区别详解,没法详解,数据结构就够研究几个月的,不过要是把目标放在会用上,就容易多了,也无需了解底层,看看API文档,知道什么方法是干什么的会用就行了。 集合类巨多无比,其实常用的也就这么几个,其他的都不用太看,你就看看:ArrayList、LinkedList、HashMap、TreeMap、HashSet 就行了,我理解也有限,简单说一下这几个: Collection下面有List和Set,List有ArrayList、LinkedList,ArrayList底层以Object类型数组实现,特点...

相关文章

更多

Java并发编程基础知识片段

Java 5并发包的加入,给Java的并发程序的开发带来了很多的好处,在此列举一些并发编程中应该掌握的 ...

Java并发编程总结---Hadoop核心源码实例解读

程序设计需要同步(synchronization),原因: 1)复杂的功能要求的需要使用多线程编程,线 ...

实战Java高并发程序设计 pdf 下载

实战Java高并发程序设计 pdf 下载转载httpdownload.csdn.net/downloa ...

《实战java高并发程序设计》源码下载

实战java高并发程序设计 配套源码下载1、已经下载好放在百度盘,直接下载就行链接httpspan.b ...

Java 多线程编程

Java 多线程编程 Java给多线程编程提供了内置的支持。一个多线程程序包含两个或多个能并发 ...

构建高并发高可用的电商平台架构实践

从各个角度总结了电商平台中的架构实践,由于时间仓促,定了个初稿,待补充完善,欢迎大家一起交流。 转载请 ...

java极限编程.pdf

考虑到富有经验的Java程序员的需要,本书首先简短介绍极限编程方江及技术,随后探究本书始终沿用的一个应 ...

构建高并发高可用的电商平台架构实践

从各个角度总结了电商平台中的架构实践,由于时间仓促,定了个初稿,待补充完善,欢迎大家一起交流。 转载请 ...

Java 网络编程

Java 网络编程 网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来。 ...

java网络编程练习

1、练习--TCP客户端并发登陆/* 客户端通过键盘录入用户名,服务端对这个用户名进行校验。 如果 ...

最新问答

更多

获取MVC 4使用的DisplayMode后缀(Get the DisplayMode Suffix being used by MVC 4)

我用Google搜索了一个解决方案。 “EnumDisplayModeProvider”是我自己设置网站的各种模式的枚举。 public EnumDisplayModeProvider GetDisplayModeId() { foreach (var mode in DisplayModeProvider.Instance.Modes) if (mode.CanHandleContext(HttpContext)) {

如何通过引用返回对象?(How is returning an object by reference possible?)

这相对简单:在类的构造函数中,您可以分配内存,例如使用new 。 如果你制作一个对象的副本,你不是每次都分配新的内存,而是只复制指向原始内存块的指针,同时递增一个也存储在内存中的引用计数器,使得每个副本都是对象可以访问它。 如果引用计数降至零,则销毁对象将减少引用计数并仅释放分配的内存。 您只需要一个自定义复制构造函数和赋值运算符。 这基本上是共享指针的工作方式。 This is relatively easy: In the class' constructor, you allocate m

矩阵如何存储在内存中?(How are matrices stored in memory?)

正如它在“熵编码”中所说的那样,使用Z字形图案,与RLE一起使用,在许多情况下,RLE已经减小了尺寸。 但是,据我所知,DCT本身并没有给出稀疏矩阵。 但它通常会增强矩阵的熵。 这是compressen变得有损的点:输入矩阵用DCT传输,然后量化量化然后使用霍夫曼编码。 As it says in "Entropy coding" a zig-zag pattern is used, together with RLE which will already reduce size for man

每个请求的Java新会话?(Java New Session For Each Request?)

你是如何进行重定向的? 您是否事先调用了HttpServletResponse.encodeRedirectURL()? 在这里阅读javadoc 您可以使用它像response.sendRedirect(response.encodeRedirectURL(path)); The issue was with the path in the JSESSIONID cookie. I still can't figure out why it was being set to the tomca

css:浮动div中重叠的标题h1(css: overlapping headlines h1 in floated divs)

我认为word-break ,如果你想在一个单词中打破行,你可以指定它,这样做可以解决问题: .column { word-break:break-all; } jsFiddle演示。 您可以在此处阅读有关word-break属性的更多信息。 I think word-break, with which you can specify if you want to break line within a word, will do the trick: .column { word-break

无论图像如何,Caffe预测同一类(Caffe predicts same class regardless of image)

我认为您忘记在分类时间内缩放输入图像,如train_test.prototxt文件的第11行所示。 您可能应该在C ++代码中的某个位置乘以该因子,或者使用Caffe图层来缩放输入(请查看ELTWISE或POWER图层)。 编辑: 在评论中进行了一次对话之后,结果发现在classification.cpp文件中错误地删除了图像均值,而在原始训练/测试管道中没有减去图像均值。 I think you have forgotten to scale the input image during cl

xcode语法颜色编码解释?(xcode syntax color coding explained?)

转到: Xcode => Preferences => Fonts & Colors 您将看到每个语法高亮颜色旁边都有一个简短的解释。 Go to: Xcode => Preferences => Fonts & Colors You'll see that each syntax highlighting colour has a brief explanation next to it.

在Access 2010 Runtime中使用Office 2000校对工具(Use Office 2000 proofing tools in Access 2010 Runtime)

你考虑过第三方拼写检查吗? 您可以将在C#中开发的自定义WinForms控件插入访问数据库吗? VB6控件怎么样? 如果你能找到一个使用第三方库进行拼写检查的控件,那可能会有效。 Have you considered a third party spell checker? Can you insert a custom WinForms controls developed in C# into an access database? What about a VB6 control? If

从单独的Web主机将图像传输到服务器上(Getting images onto server from separate web host)

我有同样的问题,因为我在远程服务器上有两个图像,我需要在每天的预定义时间复制到我的本地服务器,这是我能够提出的代码... try { if(@copy('url/to/source/image.ext', 'local/absolute/path/on/server/' . date("d-m-Y") . ".gif")) { } else { $errors = error_get_last(); throw new Exception($err

从旧版本复制文件并保留它们(旧/新版本)(Copy a file from old revision and keep both of them (old / new revision))

我不确定我完全明白你在说什么。 你能编辑你的帖子并包含你正在做的Subversion命令/操作的特定顺序吗? 最好使用命令行svn客户端,以便容易为其他人重现问题。 如果您只是想获取文件的旧副本(即使该文件不再存在),您可以使用如下命令: svn copy ${repo}/trunk/moduleA/file1@${rev} ${repo}/trunk/moduleB/file1 其中${repo}是您的存储库的URL, ${rev}是您想要的文件的版本。 这将恢复该文件的旧版本,包括最高版本