首页 \ 问答 \ 《Java并发编程实战》并发编程实践》哪本比较好

《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集合类题目[2022-07-23]

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

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

    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.util包中。 集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象就是指集合中对象的引用(reference)。 集合类型主要有3种:set(集)、list(列表)和map(映射)。 (1)集 集(set)是最简单的一种集合,它的对象不按特定方式排序,只是简单的把对象加入集合中,就像往口袋里放东西。 对集中成员的访问和操作是通过集中对象的引用进行的,所以集中不能有重复对象。 集也有多 ...
  • 都是在讲集合,就全是和集合有关的。。。。。框架也就是某些类的全称。。。。 集合是说拥有集合属性的定义 集合类,是一些实现类。。。。。
  • 你就需要每种动物定义一个类来描述。 当你定义完全部的动物后,你可能就会发现,其他每种动物都有名称,年龄.只是每种东西喜欢的食物不一样。 这个时候你就会进行提前,把所有动物的共性提取出来,放在一个类中 class BaseAnimal{ String name; int age; public void like() { //在这里一般会根据需要将,将实现比较有代表性的行为封装在Base中。 } } 然后你就可以定义Dog class Dog extends BaseAnimal{ public void l ...
  • //我用集合框架的老大跟子类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[] arr ...
  • 容器是指放东西的物品,在JAVA里面也是这样的,比如 list 是可以用来放对象的列表 你也可以自定义一些类来放其它对象,那么,你定义的这个类就是其它对象的容器。 集合是一组可变数量的数据项,集合的种类包括列表,集,多重集,树和图,通俗地讲就是这么一堆东西。
  • 先了解一下集合类的一个整体的架构 比如collection下面两个接口 list set list下面主要有三个实现ArrayList linkedList vector ,set下面主要有hashSet 而map则是另一个包下的 属于集合框架 map下面有HashMap实现 然后 通过不同的对比 了解他们的特点 使用的场合 (互相对比) ArrayList---vector(区别) arrayList 是异步 vector是同步 异步(一个人在对这个集合进行操作时 同时另外一个人 也可以对他进行操作)不安 ...
  • 区别详解,没法详解,数据结构就够研究几个月的,不过要是把目标放在会用上,就容易多了,也无需了解底层,看看API文档,知道什么方法是干什么的会用就行了。 集合类巨多无比,其实常用的也就这么几个,其他的都不用太看,你就看看:ArrayList、LinkedList、HashMap、TreeMap、HashSet 就行了,我理解也有限,简单说一下这几个: Collection下面有List和Set,List有ArrayList、LinkedList,ArrayList底层以Object类型数组实现,特点是查找很快 ...

相关文章

更多

最新问答

更多
  • 如何检索Ember.js模型的所有属性(How to retrieve all properties of an Ember.js model)
  • maven中snapshot快照库和release发布库的区别和作用
  • arraylist中的搜索元素(Search element in arraylist)
  • 从mysli_fetch_array中获取选定的值并输出(Get selected value from mysli_fetch_array and output)
  • Windows Phone上的可用共享扩展(Available Share Extensions on Windows Phone)
  • 如何在命令提示符下将日期设置为文件名(How to set file name as date in command prompt)
  • 如何在Laravel 5.2中使用paginate与关系?(How to use paginate with relationships in Laravel 5.2?)
  • 从iframe访问父页面的id元素(accessing id element of parent page from iframe)
  • linux的常用命令干什么用的
  • Feign Client + Eureka POST请求正文(Feign Client + Eureka POST request body)
  • 怎么删除禁用RHEL/CentOS 7上不需要的服务
  • 为什么Gradle运行测试两次?(Why does Gradle run tests twice?)
  • 由于有四个新控制器,Auth刀片是否有任何变化?(Are there any changes in Auth blades due to four new controllers?)
  • 如何交换返回集中的行?(How to swap rows in a return set?)
  • 在android中的活动之间切换?(Switching between activities in android?)
  • Perforce:如何从Depot到Workspace丢失文件?(Perforce: how to get missing file from Depot to Workspace?)
  • Webform页面避免运行服务器(Webform page avoiding runat server)
  • 在ios 7中的UITableView部分周围绘制边界线(draw borderline around UITableView section in ios 7)
  • 内存布局破解(memory layout hack)
  • 使用Boost.Spirit Qi和Lex时的空白队长(Whitespace skipper when using Boost.Spirit Qi and Lex)
  • 我们可以有一个调度程序,你可以异步添加东西,但会同步按顺序执行吗?(Can we have a dispatcher that you can add things todo asynchronously but will be executed in that order synchronously?)
  • “FROM a,b”和“FROM a FULL OUTER JOIN b”之间有什么区别?(What is the difference between “FROM a, b” and “FROM a FULL OUTER JOIN b”?)
  • Java中的不可变类(Immutable class in Java)
  • bat批处理文件结果导出到txt
  • WordPress发布查询(WordPress post query)
  • 如何在关系数据库中存储与IPv6兼容的地址(How to store IPv6-compatible address in a relational database)
  • 是否可以检查对象值的条件并返回密钥?(Is it possible to check the condition of a value of an object and JUST return the key?)
  • 德州新起点计算机培训学校主要课程有什么?
  • GEP分段错误LLVM C ++ API(GEP segmentation fault LLVM C++ API)
  • “latin1_german1_ci”整理来自哪里?(Where is “latin1_german1_ci” collation coming from?)