Java集合(二)

ArrayList, Vector, LinkedList异同
   1)三者都是List接口的实现类。都属于线性数据结构。
   2)ArrayList和Vector属于顺序表,逻辑顺序同物理顺序一致。内部实现都是采用可变长度数组方式存储数据,允许直接按序号索引元素。

3)Vector是java最初使用的变长数组对象,关键方法进行了线程安全控制(synchronized关键字修饰方法),通常性能上较ArrayList差。如果只有一个线程会访问到集合,那最好是使用ArrayList,因为它不考虑线程安全,效率会高些;如果有多个线程会访问到集合,那最好是使用Vector,因为不需要我们自己再去考虑和编写线程安全的代码。

4)LinkedList使用双向链表实现存储。逻辑顺序和物理顺序不一致。其内部维护一个 Entry 内部类,该 Entry对象的结构为: Entry { Entry previous; Object element; Entry next; } 其中的 Object 类型的元素 element 就是我们向 LinkedList 中所添加的元素,然后 Entry 又构造好了向前与向后的引用 previous、next

5)性能方面,当执行随机查询操作时,采用顺序结构的Vector或ArrayList 比较好。
当在数据结构中间执行插入或者删除操作时,采用链式结构的LinkedList比较好,但是对于头尾位置的元素增删操作,性能相差不大。

HashSet
1) Set接口主要实现类之一,与List接口实现的顺序结构不同,Set接口数据存储方式是离散的,并且不包含重复元素。更确切地讲,set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2,并且最多包含一个 null 元素。正如其名称所暗示的,此接口模仿了数学上的 set 抽象。

2)当使用HashSet时,hashCode()方法就会得到调用,判断已经存储在集合中的对象的 hash code值是否与增加的对象的 hash code值一致; 如果不一致,直接加进去;如 果一致,再进行 equals方法的比较,equals方法如果返回 true,表示对象已经加进 去了, 就不会再增加新的对象,否则加进去。

3. HashMap和Hashtable的区别
1)类似于Vector和ArrayList之间的区别,两者都是实现了同一接口(Map),都是采用类似数据存储方式维护数据的(key-value对)。HashMap是Map接口较新的实现类
2)HashMap是Hashtable的轻量级实现(非线程安全的实现)由于非线程安全,效率上可能高于Hashtable。
3)HashMap允许将null作为一个元素的key或者value,而Hashtable不允许, key和value都不允许为null
4)Hashtable继承自Dictionary类,而HashMap继承自AbstractMap。HashTable

LinkedHashSet
TreeSet--必须要求存放的对象实现Comparable接口,否则在存入元素的时候会抛出ClassCastException
LinkedHashMap
TreeMap--以Key来做一个自然排序 ,用作key的类型必须实现comparable接口
for(String str : xxList){
xxList.remove(str);
}

时间: 2024-08-02 18:58:02

Java集合(二)的相关文章

Java集合(二):List列表

在上一节中,介绍了Java集合的总体情况.从这节開始,将介绍详细的类.这里不单单介绍类的使用方法.还会试图从源代码的角度分析类的实现.这一节将介绍List接口及实现类.即列表中的链表LinkedList和数组列表ArrayList. 1 List接口及抽象类 List接口扩展自Collection接口,这个接口设计了一些适合列表操作的方法.List是一个有序集合.元素能够加入到容器中某个特定的位置. 使用javac编译List.java源代码后,能够使用javap反编译源代码获得接口的详细信息.

Java集合(一):Java集合概述

注:本文基于JDK 1.7 1 概述 Java提供了一个丰富的集合框架,这个集合框架包含了许多接口.虚拟类和实现类.这些接口和类提供了丰富的功能,能够满足基本的聚合需求.下图就是这个框架的整体结构图: 可以看见,这个框架非常大,大到吃惊的地步.这个图的左面部分是接口,右面部分是类,中间的线代表了右面的类实现了左面的哪些接口.比如,AbstractList类实现了List接口,那么继承自AbstractList类的子类都实现了这个接口.还有,如果一个类实现了一个接口,那么这个类也实现了这个接口的所

【由浅入深理解java集合】(五)——集合 Map

前面已经介绍完了Collection接口下的集合实现类,今天我们来介绍Map接口下的两个重要的集合实现类HashMap,TreeMap.关于Map的一些通用介绍,可以参考第一篇文章.由于Map与List.Set集合的某些特性有重合,因此观看本篇文章的会参考到之前的一些内容,最下方有链接.如果已经有这方面的基础,那么对Map的学习将会事半功倍. HashMap HashMap 是一个散列表,它存储的内容是键值对(key-value)映射. 既然要介绍HashMap,那么就顺带介绍HashTable

Java提高篇(三六)-----java集合细节(二):asList的缺陷

在实际开发过程中我们经常使用asList讲数组转换为List,这个方法使用起来非常方便,但是asList方法存在几个缺陷: 一.避免使用基本数据类型数组转换为列表 使用8个基本类型数组转换为列表时会存在一个比较有味的缺陷.先看如下程序: public static void main(String[] args) { int[] ints = {1,2,3,4,5}; List list = Arrays.asList(ints); System.out.println("list'size:&

Java集合源码学习笔记(二)ArrayList分析

Java集合源码学习笔记(二)ArrayList分析 >>关于ArrayList ArrayList直接继承AbstractList,实现了List. RandomAccess.Cloneable.Serializable接口,为什么叫"ArrayList",因为ArrayList内部是用一个数组存储元素值,相当于一个可变大小的数组,也就是动态数组. (1)继承和实现继承了AbstractList,实现了List:ArrayList是一个数组队列,提供了相关的添加.删除.修

JAVA集合类型(二)

JAVA集合类型 (现代的变量集群) watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" > List (接口) 特点: a. 先后顺序敏感.LIST结构中的元素必须分出谁先谁后. b. 能够反复.... 主要用来模拟队列(queue)等生活中对先后顺序敏感的应用场景. <1> ArrayLis

(二)java集合框架综述

一集合框架图 说明:对于以上的框架图有如下几点说明 1.所有集合类都位于java.util包下.Java的集合类主要由两个接口派生而出:Collection和Map,Collection和Map是Java集合框架的根接口,这两个接口又包含了一些子接口或实现类.2. 集合接口:6个接口(短虚线表示),表示不同集合类型,是集合框架的基础.3. 抽象类:5个抽象类(长虚线表示),对集合接口的部分实现.可扩展为自定义集合类.4. 实现类:8个实现类(实线表示),对接口的具体实现.5. Collectio

Java 集合系列之二:List基本操作

1. Java List 1. Java List重要观点 Java List接口是Java Collections Framework的成员. List允许您添加重复元素. List允许您拥有'null'元素. List接口在Java 8中有许多默认方法,例如replaceAll,sort和spliterator. 列表索引从0开始,就像数组一样. List支持泛型(类型的参数化),我们应尽可能使用它.将Generics与List一起使用将在运行时避免ClassCastException. 2

java集合(二)List集合之ArrayList详解

前言: 有序列表,允许存放重复的元素:实现类: ArrayList:数组实现,查询快,增删慢,轻量级:(线程不安全) LinkedList:双向链表实现,增删快,查询慢 (线程不安全) Vector:数组实现,重量级 (线程安全.使用少) Stack:对象栈,遵循先进后出的原则. 一.ArrayList简介 ArrayList 是 java 集合框架中比较常用的数据结构了.继承自 AbstractList,实现了 List 接口.底层基于数组实现容量大小动态变化.允许 null 的存在.同时还实

Java集合源码分析(二)ArrayList

ArrayList简介 ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态增长内存. ArrayList不是线程安全的,只能用在单线程环境下,多线程环境下可以考虑用Collections.synchronizedList(List l)函数返回一个线程安全的ArrayList类,也可以使用concurrent并发包下的CopyOnWriteArrayList类. ArrayList实现了Serializable接口,因此它支持序列化,能够通过