JAVA中对LinkedList、TreeSet、HashMap、TreeMap、Iterator的总结

一、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;
            }
        }
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值