天天看点

java集合知识总结

集合

list

  • ArrayList list = new ArrayList<>();
    ListIterator<String> iterator = list.listIterator();
    while (iterator.hasNext()) {
        String string = (String) iterator.next();
        System.out.println(string);
    
    }
    
    for(String s : list){
        System.out.println(s);
    }
               
  • Collection
    • boolean add(Object e)

      确保此 collection 包含指定的元素

    • int size()

      返回此 collection 中的元素数。

    • boolean isEmpty()

      如果此 collection 不包含元素,则返回 true。

    • void clear()

      移除此 collection 中的所有元素。

    • boolean addAll(Collection c)

      将指定 collection 中的所有元素都添加到此 collection 中

    • boolean contains(Object o)

      如果此 collection 包含指定的元素,则返回 true。

    • Iterator iterator()

      返回在此 collection 的元素上进行迭代的迭代器。

      Collection collection = new ArrayList<>();
      Iterator iterator =collection.iterator();
                 
    • boolean hasNext()

      如果仍有元素可以迭代,则返回 true。

    • E next()

      返回迭代的下一个元素。

    • Object[] toArray()

      返回包含此 collection 中所有元素的数组

      Collection collection = new ArrayList<>();
      collection.add("women");
      collection.add("doushi");
      collection.add("中国人");
      Object[] objects = collection.toArray();
                 
  • LinkedList
    ListIterator<Person> iterator = list.listIterator();
    while(iterator.hasNext()){
        System.out.println(iterator.next());
    }
               
    • E element()

      获取但不移除此列表的头(第一个元素)。

    • E getFirst()

      返回此列表的第一个元素。

    • E remove()

      获取并移除此列表的头(第一个元素)。

  • list
    • void add(int index, E element)

      在列表的指定位置插入指定元素

    • E get(int index)

      返回列表中指定位置的元素。

    • ListIterator listIterator()

      返回此列表元素的列表迭代器

    • boolean hasPrevious()

      如果以逆向遍历列表,列表迭代器有多个元素,则返回 true。

    • E previous()

      返回列表中的前一个元素。

      ListIterator iterator = list.listIterator();
      while (iterator.hasNext()) {
      Object object = (Object) iterator.next();
      System.out.println(object);
      }
                 
  • //java.util.ConcurrentModificationException 并发修改异常
    /**
     * 产生的原因:
     * 迭代器依赖于集合存在,在迭代的过程中集合发生了改变,但是迭代器还是依赖于原来的集合
     * 并没有发生改变,所以出现了该异常。
     * 
     * 解决方案:
     * 1、让迭代器自己添加
     * 2、用普通for循环
     *  
     */
    ListIterator iterator = list.listIterator();
    while (iterator.hasNext()) {
        String object = (String) iterator.next();
        if(object.equals("小宋")){
            list.add("隔壁老王");
            iterator.add("隔壁老王");
    
        }
    
    }
               
  • Vector
    • void addElement(E obj)

      将指定的组件添加到此向量的末尾,将其大小增加 1。

    • E elementAt(int index)

      返回指定索引处的组件。

    • Enumeration elements()

      返回此向量的组件的枚举

    • boolean hasMoreElements()

      测试此枚举是否包含更多的元素。

    • E nextElement()

      如果此枚举对象至少还有一个可提供的元素,则返回此枚举的下一个元素。

      Vector vector = new Vector<>();

      vector.add(10);

      vector.add(520);

      vector.addElement(10000);

      Enumeration em = vector.elements();

      while(em.hasMoreElements()){

      System.out.println(em.nextElement());

      }

      ListIterator iterator = vector.listIterator();

      while(iterator.hasNext()){

      System.out.println(iterator.next());

      }

      for(int i =0;i

- HashSet

- HashSet<String> hashSet = new HashSet<>();
    hashSet.add("张三");
    hashSet.add("李四");


    Iterator<String> iterator = hashSet.iterator();
    while (iterator.hasNext()) {
        String string = (String) iterator.next();
        System.out.println(string);
    }


    HashSet<Person> hashSet = new HashSet<>();
    hashSet.add(new Person("张三", 18));
    hashSet.add(new Person("李四", 28));


    for (Person person : hashSet) {
        System.out.println(person);
    }
           
  • HashSet比较:
    • 先比较hashCode,如果hashcode一样,再比较equals(),
      • equals()相同,不加入;equals()不相同加入
      • hashcode不一样直接加入
  • LinkedHashSet
    LinkedHashSet<Person> set = new LinkedHashSet<>();
    set.add(new Person("张三", 18));
    set.add(new Person("李四", 28));
    set.add(new Person("王五", 38));
    set.add(new Person("王五", 38));
    
    for (Person person : set) {
        System.out.println(person);
    }
               
  • 比较器接口的实现类
    public class MyComparator implements Comparator<Person> {
    
    @Override
    public int compare(Person t1, Person t2) {
    int a = t1.age - t2.age;
    if(a==0){
        return t1.name.compareTo(t2.name);
    }
    return a;
    }
    }
               
  • TreeSet
    TreeSet<Integer> set = new TreeSet<>();
    set.add(100);
    Iterator<Integer> iterator = set.iterator();
    while (iterator.hasNext()) {
        Integer integer = (Integer) iterator.next();
        System.out.println(integer);
    }
               
  • 使用自然排序
  • TreeSet()构造一个新的空 set,该 set 根据其元素的自然顺序进行排序。
    TreeSet<Teacher> set = new TreeSet<>();
    set.add(new Teacher("唐僧",100));
    set.add(new Teacher("菩提老祖",3000));
               

Map集合

  • map集合遍历:
    • 1.put(K key, V value) 将指定的值与此映射中的指定键关联
    • 2.Collection values() 返回此映射中包含的值的 Collection 视图。
      1. Set
//集合赋值
Map<Integer, String> map = new HashMap<>();
        map.put(, "java");
        map.put(, "php");
        map.put(, "c");
//遍历value值
        Collection<String> collection = map.values();
        for(String string:collection){
            System.out.print(string);
        }
//通过Entry遍历循环打印K、V值
//先找(结婚证)Entry,得到Entry在通过getKEy和getValue获取值
Set<Map.Entry<Integer, String>> set = map.entrySet();

        for (Entry<Integer, String> entry : set) {
            Integer key = entry.getKey();
            String value = entry.getValue();
            System.out.println(key+","+value);
        }
           
  • 一个map作为list元素的集合
ArrayList<HashMap<String, String>> list = new ArrayList<>();
        HashMap<String, String> map = new HashMap<>();
        map.put("1", "java");
        map.put("2", "php");
        map.put("3", "android");

        list.add(map);

        for(HashMap<String, String> hashMap : list){
            Set<Map.Entry<String, String>> set =hashMap.entrySet();
            for(Map.Entry<String, String> entry : set){
                System.out.println(entry.getKey()+","+entry.getValue());
            }

        }
           

Map集合的实现类的区别:

  • hashMap
    • 基于哈希表的map借口实现
    • 允许null值和null键
    • 线程不同步,安全低,效率高
  • treeMap
    • 基于红黑树的实现
  • hashMap和treeMap的选择:
    • hashMap效率高于TreeMap;数据添加修改使用HashMap;数组排序使用TreeMap
  • hashMap和hashTable区别
    • 除非同步和允许使用null之外,hashMap类与hashTable大致相同
    • hashMap是不同步,hashTable是同步
    • hashMap允许使用null值和null键,HashTable不允许null和null键
  • LinkedHashMap
    • Map借口的哈希表和链表实现,具有可预知迭代顺序。

-遍历

//map集合---》方法
        for(Entry<Integer, String> entry:map.entrySet()){
            System.out.println(entry.getKey()+":"+entry.getValue());
        }
        //map集合--》方法
        for(Integer key:map.keySet()){
            System.out.println("key="+key);
        }
        for(String value:map.values()){
            System.out.println("value="+value);
        }
        //map集合:Interator
        Iterator<Map.Entry<Integer, String>> iterator = map.entrySet().iterator();
        while(iterator.hasNext()){
            Map.Entry<Integer, String> entry = iterator.next();
            System.out.println(entry.getKey()+":"+entry.getValue());
        }