集合复习

1.什么是集合

一种存放对象的容器

2.分类

在Java中(util包下)集合分为单列集合(Collection)与双列集合(Map)

2.1.Collection集合

Collection是单列集合的顶层父接口,其下分为List集合与Set集合两大类。
在这里插入图片描述

2.1.1.List集合

list集合是

  • 有序的,
  • 可以重复,
  • 只能添加引用数据类型(存放基本数据类型会转换成其对应的包装类)

list集合有三种遍历方式
1 ) 下标遍历(for循环,指定下标长度,使用List集合的size()方法,进行for循环遍历)
2 ) foreach遍历(使用foreach遍历List,但不能对某一个元素进行操作)
3 ) 迭代器遍历(适用迭代器Iterator遍历:直接根据List集合的自动遍历)

//迭代器Iterator的使用

//1)获取迭代器(相当于实现接口Iterator的类)
Iterator<String> iterator = list.iterator();
//2)获取迭代器(相当于实现接口Iterator的类)
while(iterator.hasNext()){//判断是否有这个迭代元素
   System.out.println(iterator.next());//.next()是获取这个迭代元素
}
2.1.1.1.ArrayList

特点 :

  • 使用频率最高。
  • 有索引
  • 底层是Object数组,所以查询快,增删慢

因为在数组结构中,数组只需要一个索引就能查找到数据,所以查询快。
但是在增删时,会移动数组,所以增删慢

  • 有序(这里的有序是指,存储顺序是否按添加顺序来存储对象的)
  • 元素可重复
  • 线程不安全(添加数据的时候,可能会发生数组越界)
2.1.1.2.LinkedList

特点 :

  • 有索引
  • 底层是双向链表,查询慢,增删快

因为底层是个链表,进行查询的时候,首先看索引,与集合尺寸size/2比较,判断从头还是尾开始查找,又因为是链表结构,所以不停的迭代查找下一个元素,所以查询慢。

由相互引用的节点组成的双向链表,那么当把数据插入至该链表某个位置时,该数据就会被组装成一个新的节点,随后只需改变链表中对应的两个节点之间的引用关系,使它们指向新节点,即可完成插入;同理,删除数据时,只需删除对应节点的引用即可,所以增删快

  • 有序
  • 元素可重复
  • 线程不安全

2.1.2.Set集合

  • 无序(LinkedHashSet除外)
  • 无索引
  • 元素唯一

使用哈希表结构保存自定义类型时,为了保证元素的唯一性,要重写自定义类型中的hashCodeequals方法

2.1.2.1.HashSet集合

特点 :

2.1.2.2.LinkedHashSet集合

特点 :

  • 有序
  • 无索引
  • 元素唯一
  • 底层是链表+哈希表结构
2.1.2.3.TreeSet集合

特点 :

  • 无序(这里的无序是指,存储顺序是否按添加顺序来存储对象的(但是有自然顺序))
  • 无索引
  • 元素唯一
  • 底层是红黑树

2.2.Map集合

在这里插入图片描述

  • 无序
  • 以键值对的形式添加元素,
  • 键不能重复,值可以重复,如果键相同,值会覆盖
  • 它没有继承Collection接口

遍历

  • 1).通过Map.keySet遍历key和value
    map.keySet()返回的是所有key的值
    map.get(in)得到每个key对应value的值
  • 2).通过Map.entrySet使用iterator遍历key和value
  • 3).通过Map.entrySet遍历key和value
    map.entrySet() 返回此映射中包含的映射关系的 Set视图。
  • 4).通过Map.values()遍历所有的value,但不能遍历key
public static void main(String[] args) {
         Map<Integer, String> map = new HashMap<Integer, String>();
        map.put(1, "a");
        map.put(2, "b");
        map.put(3, "ab");
        map.put(4, "ab");
        map.put(4, "ab");// 和上面相同 , 会自己筛选
        System.out.println(map.size());

        System.out.println("第一种:通过Map.keySet遍历key和value:");
        for (Integer in : map.keySet()) {
            //map.keySet()返回的是所有key的值
            String str = map.get(in);//得到每个key多对用value的值
            System.out.println(in + "     " + str);
        }


        System.out.println("第二种:通过Map.entrySet使用iterator遍历key和value:");
        Iterator<Map.Entry<Integer, String>> it = map.entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry<Integer, String> entry = it.next();
            System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
        }

        // 第三种:推荐,尤其是容量大时
        System.out.println("第三种:通过Map.entrySet遍历key和value");
        for (Map.Entry<Integer, String> entry : map.entrySet()) {
            //Map.entry<Integer,String> 映射项(键-值对)  有几个方法:用上面的名字entry
            //entry.getKey() ;entry.getValue(); entry.setValue();
            //map.entrySet()  返回此映射中包含的映射关系的 Set视图。
            System.out.println("key= " + entry.getKey() + " and value= "
                    + entry.getValue());
        }

        System.out.println("第四种:通过Map.values()遍历所有的value,但不能遍历key");
        for (String v : map.values()) {
            System.out.println("value= " + v);
        }

    }

2.2.1.HashTable集合

HashTable是一个古老的Map实现类,它提供的方法比较繁琐,目前基本不用了

特点 :

  • 线程安全的,但是效率相对较低
  • Hashtable不允许使用null作为key和value

2.2.2.HashMap集合

HashTable与HashMap之间的关系完全类似于Vector(老版Arraylist,但是线程安全)和Arraylist的关系。

特点 :

2.2.3.LinkedHashMap集合

特点 :

  • 有序(按照插入的顺序排序)
  • 底层是链表+哈希表结构

通过链表负责维护Map的迭代顺序,与插入顺序一致,所以性能比HashMap低,但在迭代访问Map里的全部元素时有较好的性能。

2.2.4.TreeMap集合

特点 :

  • 线程不安全
  • 底层是红黑树
  • 有序(按照Key的自然顺序或者Comprator的顺序进行排序)

TreeMap 默认排序规则:按照key的字典顺序来排序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值