List、Set、Map集合

    xiaoxiao2026-09-30  13

    一、常见集合的构造

    a、java.util.Collection[I]—— java.util.List[I]—— java.util.ArrayList[C] java.util.LinkedList[C] java.util.Vector[C] java.util.Stack[C] java.util.AbstractList[C] java.util.Set[I]—— java.util.HashSet[C]—— java.util.LinkedHashSet[C] java.util.SortedSet[I]—— java.util.NavigableSet[I]—— java.util.TreeSet[C] java.util.Map[I]—— java.util.SortedMap[I]—— java.util.TreeMap[C] java.util.HashTable[C] java.util.HashMap[C] java.util.LinkedHashMap[C] java.util.WeakHashMap[C]

    二、List集合的使用 1、初始化: 例如:List list = new Arraylist<>(); 2、访问: list.get(int index):传入对应索引,返回索引对应的元素值。 3、移除:多个方法重载 list.remove(int index):传入对应索引,删除对应位置的元素。 remove(Object o):移除此列表中首次出现的指定元素(如果存在)。 removeRange(int fromIndex, int toIndex):移除列表中索引在 fromIndex(包括)和 toIndex(不包括)之间的所有元素。 4、设置: list.set(int index, Object value):将指定index处索引的值,更换为value 5、遍历: 5.1、for循环 5.2、foreach循环 5.3、while循环(使用较少) 5.4、迭代器 6、迭代器:Iterator it = list.iterator(); 6.1、hasNext():判断当前指针后方是否还有可用元素。如果有返回true,反 之,false。 6.2、next():将迭代器指针移动到下一个元素坐标。(初始默认-1) 6.3、remove():删除当前指针所在的元素项。 7、泛型: 7.1、E:Element 7.2、优势: 7.2.1、增加代码安全性。(举例说明) 7.2.2、得到的数据类型,是已经强转过的类型,使用起来非常方便。 7.2.3、调用方法时,得到泛型支撑的方法,可以直接在方法提示中查 看,增加代码可读性。 8、ArrayList与LinkedList的对比 a、ArrayList:数据访问快。(读取快) b、LinkedList:数据插入块,删除快。(写入快) 9、Vector与Stack: Vector:类似于ArrayList,但是是线程安全的。 而ArrayList是线程不安全的。 Stack:维护了一个堆栈,原则:后进先出。 一般用于维护Activity的声明周期的管控。

    三、Set集合的使用 1、Set集合的存储特点 a、Set集合内部使用Map集合来存储。 b、HashSet集合,元素具有互斥性。(用代码举例) c、HashSet集合,元素插入存储的顺序和遍历访问的数序,是不一致的。即,无序性。 e、TreeSet集合,存储其中的元素会按照compareTo比较出来的结果进行排序。 e.1、无序性:插入顺序和存储顺序不一定一致。 e.2、有序性:该集合中的元素均按照升序排列。 e.3、互斥性,与HashSet相同。 f、LinkedHashSet集合,继承自HashSet f.1、有序性:元素的访问可以按照插入的顺序进行访问。 f.2、无序性:元素的存储顺序并不一定按照插入的顺序进行。 (PS:通过链表实现插入顺序和实际存储下标的唯一映射) 2、HashSet与LinkedHashSet比较: a、HashSet:添加元素快。 b、LinkedHashSet:添加元素慢 (PS:LinkedHashSet额外维护了一个插入顺序的链表,消耗更多。) 3、Iterator: 即Set集合的遍历,Interator it = set.iterator(); 与List集合的迭代器遍历相似。 4、Iterator与ListIterator比较: a、前者:提供集合的迭代方法,hasNext(),next(),remove(); b、后者:提供向前向后的迭代方法,还可以返回迭代时的下标索引。 提供添加元素的方法,将元素添加至当前指针所指向的位置。 提供设置元素的方法,将当前指针所指向的位置的元素设置为指定值。 5、TreeSet排序原理: 使用CompareTo方法进行排序,如果是自定义类,那么需要让该类实现Comparable接口 如果欲实现按照某个数据升序排序TreeSet集合中的对象,那么使用: this.field - obj.field(升序) obj.field - this.field(降序) 6、HashSet去重原理: a、判断添加元素的HashCode是否相同。 b、判断添加元素的equals是否相同。

    四、Map集合的使用 1、HashMap a、由键可以取值,但是键是唯一的,值可以是重复的 b、hashMap是有key的hash值来排序的,在遍历的时候是随机取出数据的,不是线程同 步的,线程不安全 c、hashMap 经常用到的方法 clear() remove() put() get() putAll() d、有四种遍历方式,推荐大家使用

    for(Map.entry<k,v> entry : map.keySet()){ syso(entry.getkey()+""+entry.getvelue)} //ps(尤其是容量大的时候,效果最好)

    e、它的键只能一个可以为null,它的值可以有多个null d、应用场景:数据没有顺序,有键和值存在映射关系 2、Hashtable a、现在基本不用,现在有一个替代的集合(currentHashMap) b、它是线程同步的,线程安全,但是在存取数据的时候,只能有一个线程操作,速度慢 c、它的键值不可以为null 3、TreeMap a、它是有顺序的,它的顺序是由key来决定的(因为treeMap 是有key的hash来存放key b、它的排序(默认自然排序升序)是重写comepareTo方法 c、应用场景:需要有序的数据 4、LinkedHashMap a、它的顺序是先存先取 b、它存取速度一般情况是慢于HashMap的,但是当HashMap的容量很大,数据很 少的时候,linkedHashMap的存取速度大于HashMap c、应用场景: 比如购物车 5、Map集合的四种遍历方式 a、直接拿到key来遍历

    for(String s : map.keySet())

    b、用iterator遍历

    Iterator<Map.Entry<String, String>> iterator =map.entrySet().iterator();

    c、推荐大家使用的方式

    for(Map.Entry<String, String> entry : map.entrySet())

    d、直接根据value来遍历 for(String v : map.values()) 6、如何对HashMap中的value进行排序。 a、把当前hashMap中的entry<>对象存放到set集合中 b、把entry的set集合存放到List集合中 c、对这个list集合进行排序 d、排序好之后,存放到map集合中(LinkedHashMap)

    转载请注明原文地址: https://ju.6miu.com/read-1312463.html
    最新回复(0)