> 文章列表 > java_集合

java_集合

java_集合

1.集合

集合分为单列集合(collection)和双列集合(map).
java_集合

单列就是每个位置只有一个值,双列则是每个位置都是一对键值对,类似于python的字典。
java_集合

2.collection

其中,collection又可以分为List和Set两种。
java_集合

ArrayList的底层数据结构是数组,但不同于数组,arraylist的长度是可变的。同时由于实现的底层数据结构是数组,arraylist因此也具有数组的一些缺点:在进行增删操作时需要大批量的移动元素,非常不方便。

同时与链表数据结构的Linkedlist相比,ArrayList可以通过索引访问元素,在遍历和查找时很方便。

java_集合

LinkedList顾名思义就是通过链表这种底层数据结构实现的集合,因此具备链表的一些特性:查询慢,但增删快。
LinkedList是基于双链表实现的,可以往后遍历,也可以往前。
LinkedList有一些定义好的方法:addFirst/addLast , getFirst/getLast , removeFirst/removeLast.
java_集合
java_集合

如上两图,由于队列和栈都是重点操作首尾元素,所以LinkedList可以用来设计这两种场景。

set元素不重复,无索引,无序。
HashSet不保证插入去除顺序:

import java.util.HashSet;
import java.util.Set;public class Main {public static void main(String[] args) {Set<String> s1 = new HashSet<>();// Add a few elementss1.add("HTML");s1.add("CSS");s1.add("XML");s1.add("XML"); // Duplicate// Create another set by copying s1Set<String> s2 = new HashSet<>(s1);// Add a few more elements s2.add("Java"); s2.add("SQL");s2.add(null); // one null is fines2.add(null); // DuplicateSystem.out.println("s1: " + s1);System.out.println("s1.size(): " + s1.size());System.out.println("s2: " + s2);System.out.println("s2.size(): " + s2.size());}
}

java_集合

但LinkedSet在插入时保证元素的顺序。

import java.util.LinkedHashSet;
import java.util.Set;public class Main {public static void main(String[] args) {Set<String> s1 = new LinkedHashSet<>();s1.add("A");s1.add("B");s1.add("C");s1.add("D");System.out.println("LinkedHashSet: " + s1);}
}

java_集合

3.map

HashMap

最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度。HashMap最多只允许一条记录的键为Null(多条会覆盖);允许多条记录的值为 Null。非同步的。

TreeMap

能够把它保存的记录根据键(key)排序,默认是按升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。TreeMap不允许key的值为null。非同步的。
Hashtable

与 HashMap类似,不同的是:key和value的值均不允许为null;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了Hashtale在写入时会比较慢。
LinkedHashMap

保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的.在遍历的时候会比HashMap慢。key和value均允许为空,非同步的。

Map<String, String> map = new HashMap<String, String>();插入元素
map.put("key1", "value1");获取元素
map.get("key1")移除元素
map.remove("key1");清空map
map.clear();