基础知识
Java集合主要由2大体系构成,分别是Collection体系和Map体系,其中Collection和Map分别是2大体系中的顶层接口。
Collection主要有三个子接口,分别为List(列表)、Set(集)、Queue(队列)。其中,List、Queue中的元素有序可重复,而Set中的元素无序不可重复;
List中主要有ArrayList、LinkedList两个实现类;Set中则是有HashSet实现类;而Queue是在JDK1.5后才出现的新集合,主要以数组和链表两种形式存在。
Map同属于java.util包中,是集合的一部分,但与Collection是相互独立的,没有任何关系。Map中都是以key-value的形式存在,其中key必须唯一,主要有HashMap、HashTable、TreeMap三个实现类。
Java List详解(包括ArrayList和LinkedList的解析与操作)
1. 链表Linked-List
- 数组的优缺点:
优点:可以根据偏移实现快速的随机读写。
缺点:扩容,增删元素极慢。 - 链表的基本知识:
链表的指针域指向该节点的下一个节点的内存地址,因此尾节点的指针域为空。
链表易于插入与删除,但无法高效获取长度、访问元素。 - 单链表与双链表
- 单链表
- 单链表的插入与删除原理(关于插入与删除时如何改变链表的指针域),见链接
- 环形链表:单链表的最后一个节点指针域不为空,而是指向了链表中的另一个节点。
2.HashSet
Java中Set总结
底层由HashMap实现;
不允许出现重复因素;
允许插入Null值;
元素无序(添加顺序和遍历顺序不一致);
线程不安全,若2个线程同时操作HashSet,必须通过代码实现同步。
我的理解:可以将HashSet看作简单的集合。
- 初始化:
Set<Type> name = new HashSet<>();
- 元素添加:
hashSet.add(xxx);
- 元素移除:
hashSet.remove(xxx)
- 元素清除:
hashSet.clear();
- 判断集合是否为空:
hashSet.isEmpty()
返回boolean - xxx元素是否存在:
hashSet.contains("hello");
返回boolean - 元素数量:
hashSet.size()
- 迭代器:
hashset.iterator()
例:
Set<String> hashset = new HashSet<>();
hashset.add("First");
hashset.add("Second");
hashset.add("Th