一、LinkedList
LinkedList的底层数据结构是双向链表。
以下代码包含创建与遍历。
import java.util.Arrays;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
public class Demo01 {
public static void main(String[] args) {
List<Integer> list = new LinkedList<>(List.of(5, 7, 2, 7, 4, 8, 4, 5, 9, 3, 6, 9, 36, 8));
list.forEach(System.out::print);
System.out.println();
/**
* LinkedList底层为双向链表,使用迭代器遍历效率更高
*/
Iterator<Integer> iterator = list.iterator();
while (true) {
if (iterator.hasNext()) {
System.out.print(iterator.next());
}else {
break;
}
}
System.out.println();
Object[] objects = list.toArray();
Iterator<Object> iterator1 = Arrays.stream(objects).iterator();
iterator1.forEachRemaining(System.out::print);
}
}
二、TreeSet
TreeSet的底层数据结构是红黑树。
TreeSet即value为PRESENT的TreeMap,PRESENT = new Object()。
以下代码为创建和遍历。
import java.util.Iterator;
import java.util.List;
import java.util.TreeSet;
/**
* TreeSet即value为PRESENT的TreeMap,PRESENT = new Object()
* 底层是红黑树
*/
public class Test05 {
public static void main(String[] args) {
TreeSet<Integer> ts = new TreeSet<>(List.of(4,6,8,21,6,4,8,4,5,5,3,6,5347,57,356,34,624,6,246));
Iterator<Integer> iterator = ts.iterator();
while (iterator.hasNext()) {
System.out.print(iterator.next());
}
System.out.println();
Iterator<Integer> iterator2 = ts.stream().iterator();
iterator2.forEachRemaining(System.out::print);
System.out.println();
Iterator<Integer> iterator1 = ts.stream().toList().stream().iterator();
iterator1.forEachRemaining(System.out::print);
}
}
三、HashMap
HashMap在1.7(含)之前的数据结构是数组加链表,在1.7之后底层数据结构是链表加红黑树。
HashMap是无序的,但内部按照Hash码排序,每次输出顺序不变,不可指定排序方式。
以下代码为HashMap的创建和遍历。
package com.map;
import java.util.HashMap;
import java.util.Map;
/**
* jdk1.7(含)之前底层数据结构是数组加链表,jdk1.8(含)之后底层数据结构是链表加红黑树
*
* JDK1.8 之后在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为 8)
* (将链表转换成红黑树前会判断,如果当前数组的长度小于 64,那么会选择先进行数组扩容,而不是转换为红黑树)时,将链表转化为红黑树,以减少搜索时间。
*/
/**
* HashMap内部有一套排序规则,通过内部HashCode方法计算hash值后自动进行了排序,
* 所以读取的是经过内部排序后的数据,且此数据每次结果都是一样的顺序。
*
* 创建HashMap时无法传入lambda表达式
*/
public class Demo01 {
public static void main(String[] args) {
HashMap<Integer, String> hm = new HashMap<>();
hm.put(2, "zhangsan");
hm.put(1, "lisi");
hm.putAll(Map.of(4, "wangwu", 5, "zhaoliu", 3, "sunqi"));
System.out.println(hm);
// hm.clear();
System.out.println(hm);
for (Map.Entry<Integer, String> entry : hm.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
}
}
四、TreeMap
TreeMap的底层数据结构是红黑树。
TreeMap是有序的:TreeMap按照key的字典顺序来排序,默认是升序(注意和HashMap的按照hashCode排序来区别,HashMap是无序的)。
以下代码为TreeMap的创建和遍历。
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;
/**
* TreeMap是有序的:TreeMap按照key的字典顺序来排序(升序)
* Tree的底层数据结构是红黑树
*
* TreeMap在创建时可以传入lambda表达式进行排序
*/
public class Demo02 {
public static void main(String[] args) {
TreeMap<String, String> tm = new TreeMap<>((a,b) -> a.compareTo(b));
tm.put("one", "zhangsan");
tm.put("two", "lisi");
tm.put("three", "wangwu");
tm.put("four", "zhaoliu");
tm.put("five", "sunqi");
System.out.println(tm);
Iterator<Map.Entry<String, String>> iterator = tm.entrySet().iterator();
while (true){
if(iterator.hasNext()){
System.out.print(iterator.next() + " ");
}else {
break;
}
}
}
}