java中的集合小结

List、Set、Map

Collection集合:

–Collection

​ ----List(有序,带有索引,可重复)

​ ------ArrayList:底层数据结构为数组,优点–>查询快,根据元素下标索引进行查询。缺点增删慢,增删时需要移动大量元素。线程不安全,效率高。

​ ------LinkedList:底层数据结构为链表,优点–>增删快,根据元素间相互引用的节点进行增删。缺点查询慢,不像ArrayList中的元素拥有索引。线程不安全,效率高。

​ ------Vector:底层数据结构为数组,查询快,增删慢。线程安全,但效率低,现有使用率不高。

​ ----Set(无索引,唯一)

​ --------HashSet:底层数据结构为哈希表(哈希表查询速度快)。通过hashCode()方法和equals()方法两次比较来保证所含元素的唯一性。(此类的元素无序且唯一, 允许null元素)

​ --------LinkedHashSet:底层数据结构为链表和哈希表。(元素按照FIFO方式插入,有序且唯一)。通过链表保证元素有序,通过哈希表保证元素唯一性。

​ --------TreeSet:底层数据结构为红黑树(元素有序且 唯一)。通过自然排序和比较器排序来保证元素的有序,根据比较返回值是否为0来决定元素是否唯一。

Map集合:

–Map

Map集合的特点:1.Map集合是一个双列集合,一个元素可以包含两个值(一个key,一个value)

​ 2.Map集合中的元素,key和value的数据类型可以相同,也可以不同

​ 3.Map集合中的元素,key是唯一的,value是可以重复的。‘

​ 4.Map集合中的key和value是一一对应的。

​ ----HashMap:1.HashMap集合底层为哈希表,查询的速度特别快,

​ key是唯一的,允许存储null键和null值

​ (JDK1.8之前:数组+单向链表)

​ (JDK1.8之后:数组+单向链表/红黑树(链表的长度超过8采用红黑树,提高查询效率)

​ 2.HashMap集合是一个无序的集合,即存储元素的顺序与取出时的顺序有可能不一致

​ ----LinkedHashMap:

​ 1.LinkedHashMap集合底层是哈希表+链表(链表是保证迭代的顺序)

​ 2.LinkedHashMap集合是一个有序集合,即存储元素的顺序与取出时的顺序一致

​ ----HashTable:集合底层同样为哈希表,相比较HashMap

​ 集合中不允许存在空值(任何非null对象都可以用作键或值)

​ 单线程,线程安全,同步,速度慢

​ ----TreeMap:有序

public class CountString {
/*
    计算一个字符串中每个字符出现的次数
    1.用Scanner获取用户键盘输入的字符串
    2.创建Map集合,key是字符串中的字符,value是字符的个数
    3.遍历字符串获取每一个字符
    4.使用获取到的字符,去Map集合中判断key值是否存在,
        key存在
            则通过,并将value++,同时将新的value存储到Map集合中去。
        key不存在
            则将当前key值储存,并将value赋值为1。
    5.遍历Map集合,输出结果
    */

    public static void main(String[] args) {
        //1.使用Scanner获取用户输入的字符串
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一串字符串:");
        String str = sc.next();
        //2.创建一个map集合来存储元素
        HashMap<Character, Integer> map = new HashMap<>();
        //3.利用增强for循环遍历并获取字符串,同时进行判断
        for (char c:str.toCharArray()) {
            //如果map集合中存在该字符,则其次数即value++,并重新赋值给value
            // 否则将value赋值为1
            if (map.containsKey(c)){
                Integer value = map.get(c);
                value++;
                map.put(c,value);
            }else {
                map.put(c, 1);
            }
        }
        for (char c : map.keySet()) {
            Integer value = map.get(c);
            System.out.print(c + "=" + value + " ");
        }
        System.out.println("统计结果为:"+ map);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值