Java集合类
来源:互联网 发布:网店数据分析报告 编辑:程序博客网 时间:2024/06/10 08:55
List vs Set
List特点:存入顺序和取出顺序一致,存储的元素可以重复。
Set特点:元素的顺序无序且唯一,即无序性和唯一性。
HashSet:哈希表是通过使用称为散列法的机制来存储信息的,元素并没有以某种特定顺序来存放。
LinkedHashSet:以元素插入的顺序来维护集合的链接表,允许以插入的顺序在集合中迭代。
TreeSet:提供一个使用树结构存储Set接口的实现,对象以升序顺序存储,访问和遍历快。
ArrayList: 顺序表存储,访问快,插入和删除慢。
ArrayDeque:双向顺序存储,集成栈和队列方法,访问快,插入和删除慢。
LinkedList:双向链式表,集成栈和队列方法,访问慢,插入和删除快。
ArrayList类
ArrayList底层是Object数组,一些基本的方法:
1)增:add及其重载;
2)删:remove(index)移除指定下标的元素,remove(Object)移除指定对象的元素,clear()移除所有;
3)改:set(index,Object);
4)查:contains(); 依据equals方法来判断是否包含该元素
5)输出:for循环+size()+get(index)方法;
注意:
1).set返回的该位置上原先的元素。
2).remove(Object): 移除此列表中首次出现的指定元素(如果存在)。
LinkedList类
- LinkedList基于双向链表机制实现。
- LinkedList在插入元素时,必须创建一个新的Entry对象,并切换相应元素的前后元素的引用;在查找元素时,须遍历列表;在删除元素时,要遍历列表,找到要删除的元素,然后从列表上将此元素删除即可。
- LinkedList是非线程安全的。
ArrayList vs LinkedList的用法:
从LinkedList和ArrayList的区别来看,我们可容易的得出什么时候使用ArrayList,什么时候使用LinkedList:
1)对于随机访问get和set,ArrayList优于LinkedList,因为LinkedList要移动指针。
2)对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
Vector类
与ArrayList的用法基本一致,这里就不过于多说,只是简单说一下两者的一点区别。
Vector和ArrayList的不同点有:
1)Vector是基于Synchronized实现的线程安全的ArrayList。即Vector是线程安全的。
2)在插入元素时容量扩充的机制和ArrayList稍微有所不同,Vector是扩充2倍,并可通过传入capacityIncrement来控制容量的扩充。而ArrayList是扩充1.5倍并加1。Vector效率高。
Stack类
Stack继承于Vector,在Vector的基础上实现了Stack所要求的后进先出(LIFO),其提供了push,pop,peek等三个主要方法。
HashSet类
HashSet底层是Hash表。
前面在和List中的类做比较时我们已经知道,Set中的类其元素都是无序且唯一的,那么是用什么机制来保证元素的无序性和唯一性呢?答案是:hashCode()和equals()方法来保证。
TreeSet类
TreeSet类底层是二叉树。
TreeSet与HashSet都是实现Set的类,但是TreeSet独特指出是可以完成自动排序,要求存入其中的元素具有可比较性,依据的是compareTo方法。
1)TreeSet基于TreeMap实现,支持排序。
2)TreeSet是非线程安全的。
从对HashSet和TreeSet的描述来看,TreeSet和HashSet一样,也是完全基于Map来实现的,并且都不支持get(int)来获取指定位置的元素(需要遍历获取),
另外TreeSet还提供了一些排序方面的支持。例如传入Comparator实现、descendingSet以及descendingIterator等。
TreeMap类
- TreeMap是一个典型的基于红黑树的Map实现,因此它要求一定要有Key比较的方法,要么传入Comparator实现,要么key对象实现Comparable接口。
- TreeMap是非线程安全的。
HashMap类
- HashMap采用数组方式存储key,value构成的Entry对象,无容量限制。
- HashMap基于Key hash查找Entry对象存放到数组的位置,对于hash冲突采用链表的方式来解决。
- HashMap在插入元素时可能会要扩大数组的容量,在扩大容量时须要重新计算hash,并复制对象到新的数组中。
- HashMap是非线程安全的。
- HashMap遍历使用的是Iterator。
HashTable类
- HashTable是线程安全的。
- HashTable中无论是Key,还是Value都不允许为null。
- HashTable遍历使用的是Enumeration。
曾经HashTable的应用非常广泛,HashMap是新框架中用来代替HashTable的类,也就是说建议使用HashMap,不要使用HashTable,可以使用ConcurrentHashMap来保证线程安全。
- Java集合:集合类详解
- Java集合-常用集合类
- JAVA【集合一】集合类
- JAVA中的集合类
- JAVA中的集合类
- JAVA中的集合类
- Java集合类(整理)
- java集合类
- JAVA中的集合类
- Java集合类笔记
- JAVA中的集合类
- java集合类
- java集合类总结
- JAVA中的集合类 - -
- JAVA中的集合类
- java集合类
- java 集合类
- java中的集合类
- 求一个数的素数因子
- js使用心得——避免全局变量冲突的小技巧
- 在windows下调用手机摄像头,并传给opencv
- 在Python里安装Jieba中文分词组件
- 第16章 Channel 和Unsafe
- Java集合类
- mysql事务隔离级别
- HTML取消点击事件等一些开发技巧
- 动态数组的实现
- 自定义View的简单案例(4)实现小风车旋转的效果
- C++中二维Vector初始化的一种方式
- python基础复习之数字和字符串
- wget命令
- Android 隐藏标题栏