java集合类详解

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

java集合类详解
⼀、集合类与数组的区别
1.集合的长度可变,数组的长度固定;
2.集合⽤来存放对象引⽤,数组⽤来存放基本类型的数据;
⼆、集合类的关系
1.Collection接⼝
存储⼀组不唯⼀、⽆序的对象。

2.List接⼝
存储⼀组不唯⼀、有序(插⼊顺序)的对象。

2.1 实现类:ArrayList类、LinkedList类
ArrayList类:实现长度可变的数组,在内存中分配连续的空间,遍历元素和随机访问元素的效率较⾼。

add() addAll() clear() size() iterator() get() set()
LinkedList类:采⽤链表存储⽅式,插⼊、删除元素时效率较⾼。

add() addAll() add First() add Last() clear() remove() size() iterator() get() set()
3.Set接⼝
存储⼀组唯⼀、⽆序的对象。

唯⼀性:在添加对象时,会先采⽤对象的equals()⽅法与当前已有的对象的HashCode进⾏⽐较(重写了equals()⽅法的除外),如果没有相同的对象,则添加新的对象。

⽆序性:没有get()⽅法,⽆法通过下标遍历Set集合。

遍历set集合⽅法:
3.1 通过迭代器Iterator
public static void main(String[] args){
Set<String> set = new HashSet<String>();
set.add("c");
set.add("a");
set.add("c");
set.add("b");
Iterator<String> it = set.iterator();
while (it.hasNext()) {
String str = (String) it.next();
System.out.print(str + " ");
}
}
输出结果:a b c
3.2 增强型for循环
public static void main(String[] args) {
Set<String> set = new HashSet<String>();
set.add("c");
set.add("a");
set.add("c");
set.add("b");
for (Object obj : set) {
String str = (String) obj;
System.out.println(str);
}
}
输出结果:a b c
4.Map接⼝
存储⼀组键值对象,提供key到value的映射。

输出所有的key值:keySet()⽅法,返回键的Set视图;
输出所有的values值:values()⽅法,返回值的Collection视图;
获得所有的键值对:entrySet()⽅法,返回键值对的Set视图。

public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
map.put("java", "课堂学习");
map.put("Html", "视频学习");
// 获得所有键值对的集合
Set<Map.Entry<String, String>> entrySet = map.entrySet(); // 集合中对象的类型为Map.Entry
// ⽅法⼀:通过增强型for循环
for(Map.Entry<String, String> entry : entrySet) {
String key = entry.getKey().toString();
String value = entry.getValue().toString();
System.out.println(key + "---" + value);
}
// ⽅法⼆:通过迭代器Iterator
Iterator<Map.Entry<String,String>> it1;
it1 = entrySet.iterator();
while(it1.hasNext()){
Map.Entry<String,String> me = it1.next();
String key1 = me.getKey();
String value1 = me.getValues();
System.out.println(key1 + "---" + value1);
}
Iterator<String> it;
System.out.println("key值:");
// 获得所有键的集合
Set<String> set = map.keySet(); // 集合中对象的类型为String
it = set.iterator();
while (it.hasNext()) {
System.out.print(it.next() + "\t");
}
System.out.println("\nvalues值:");
// 获得所有值的集合
Collection<String> coll = map.values(); // 集合中对象的类型为String
it = coll.iterator();
while (it.hasNext()) {
System.out.print(it.next() + "\t");
}
}
4.1 实现类
HashMap、Hashtable、LinkedHashMap和TreeMap
HashMap
HashMap是最常⽤的Map,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的。

因为键对象不可以重复,所以HashMap最多只允许⼀条记录的键为Null,允许多条记录的值为Null,是⾮同步的。

Hashtable
Hashtable与HashMap类似,是HashMap的线程安全版,它⽀持线程的同步,即任⼀时刻只有⼀个线程能写Hashtable,因此也导致了Hashtale在写⼊时会⽐较慢,它继承⾃Dictionary类,不同的是它不允许记录的键或者值为null,同时效率较低。

ConcurrentHashMap
线程安全,并且锁分离。

ConcurrentHashMap内部使⽤段(Segment)来表⽰这些不同的部分,每个段其实就是⼀个⼩的HashTable,它们有⾃⼰的锁。

只要多个修改操作发⽣在不同的段上,它们就可以并发进⾏。

LinkedHashMap
LinkedHashMap保存了记录的插⼊顺序,在⽤Iteraor遍历LinkedHashMap时,先得到的记录肯定是先插⼊的,在遍历的时候会⽐HashMap 慢,有HashMap的全部特性。

TreeMap
TreeMap实现SortMap接⼝,能够把它保存的记录根据键排序,默认是按键值的升序排序(⾃然顺序),也可以指定排序的⽐较器,当⽤Iterator遍历TreeMap时,得到的记录是排过序的。

不允许key值为空,⾮同步的。

相关文档
最新文档