集合(十七)

集合(十七)

Collection

List

List是有序并且可以重复的集合,List常用的有ArrayList和LinkedList

ArrayList

ArrayList常用的方法:

  1. add() 添加元素
  2. remove() 删除元素
  3. contains() 是否包含某个元素
  4. get() 获取元素
  5. size() 查看List的长度

需要了解的是:ArrayList是可迭代的,建议用迭代器Iterator来遍历List, 增强型的for循环实际上也是使用迭代器的方式来遍历,实现遍历不同对象的方法统一。

LinkedList

LinkedList是使用链表的方式实现List, 它的每个元素都指向下一个元素,LinkedList占用的内存较大,通常情况下我们使用ArrayList

LinkedList常用的方法有:getFirst() 获取首元素 getLast() 获取尾元素

package com.luca.jihe;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

public class ListDemo1 {
    public static void main(String[] args) {
        //创建ArrayList
        List<String> list = new ArrayList<>();

        list.add("apple"); //添加元素
        list.add("orange");
        list.add(1, "cherry");
        list.remove(1); //去除元素
        System.out.println(list.size()); //获得长度

        //使用增强for循环便利List
        for (String l :
                list) {
            System.out.println(l);
        }
        System.out.println("===================");

        //使用迭代器遍历List
        for (Iterator<String> it = list.iterator(); it.hasNext(); ) {
            String s = it.next();
            System.out.println(s);
        }
        System.out.println("===================");

        //简单使用LinkedList
        LinkedList<String> ls = new LinkedList<>();
        ls.add("AAA");
        ls.add("BBB");
        ls.add("CCC");
        System.out.println(ls.getFirst()); //获取第一个元素
        System.out.println(ls.getLast()); //获取最后一个元素

        System.out.println("====================");
        System.out.println("List----->Array"); //List转换为数组
        List<Integer> li = List.of(1, 2, 3, 4, 5, 6);
        Integer[] i1 = li.toArray(new Integer[li.size()]);
        for (Integer i :
                i1) {
            System.out.print(i+" ");
        }

        System.out.println("====================");
        System.out.println("Array----->List"); //数组转换为List
        String[] st = {"a", "b", "c", "d"};
        List<String> l2 = List.of(st);
        for (Iterator<String> it = l2.iterator(); it.hasNext(); ) {
            System.out.printf("%s ", it.next());
        }
    }
}

Set

在Collection中另一种集合是Set, Set是无序的并且Set中的元素不可重复。常用的实现类有HashSet和TreeSet.

通常情况下使用HashSet, 与List类似,有add, remove, contains方法。

TreeSet是拥有排序的Set, 不太常用。

package com.collection;

import java.util.HashSet;
import java.util.Set;

public class SetDemo1 {
    public static void main(String[] args) {

        Set<String> s1 = new HashSet<>();

        s1.add("apple");
        s1.add("pear");
        s1.add("banana");
        s1.add("apple"); //重复的值会添加失败
        System.out.println(s1);
        boolean hasPear = s1.contains("pear");
        System.out.println(hasPear);
    }
}
package com.collection;

import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;

public class SetDemo2 {
    public static void main(String[] args) {
        Set<Integer> s2 = new TreeSet<>();
        s2.add(1);
        s2.add(2);
        s2.add(3);
        System.out.println(s2);
        System.out.println("============");
        Set<Integer> s3 = new HashSet<>();
        s3.add(1);
        s3.add(2);
        s3.add(3);
        System.out.println(s3);
    }
}

Map

Map是Collection外的一种集合类型,相当于Python中的字典Dict.

Map中常用的有HashMap和TreeMap, 与Set的命名上一样,TreeMap的特性就是增加了排序。

HashMap

HashMap中常用的方法有:

  1. put() 往Map中添加元素
  2. get() 从Map中获取元素
  3. contains() 查看Map中是否包含元素
  4. keySet() Map中所有的key, 可以用来遍历Map
  5. entrySet() 遍历Map中所有的key和value
package com.luca.jihe;

import javax.swing.tree.VariableHeightLayoutCache;
import java.util.HashMap;
import java.util.Map;

public class MapDemo1 {
    public static void main(String[] args) {
        Student xiaoMing = new Student("XiaoMing", 78);
        //创建HashMap
        Map<String, Student> map = new HashMap<>();

        //添加键值对,String: Student
        map.put("xm", xiaoMing);
        //通过key获取值
        System.out.println(map.get("xm").score);

        Student s = map.get("xm");
        System.out.println(s.equals(xiaoMing)); //true 说明是同一个实例
        System.out.println(map.containsKey("xm")); //判断是否包含key
        System.out.println(map.containsKey("xh"));

        Student xh = new Student("XiaoHong", 99);
        map.put("xh", xh);

        //遍历HashMap,通过keySet
        for (String key: map.keySet()) {
            System.out.print(map.get(key).name+"\t");
        }
        System.out.println("==================");

        //同时遍历key和value,使用entrySet
        for (Map.Entry<String, Student> entry: map.entrySet()) {
            String name = entry.getKey();
            Student value = entry.getValue();
            System.out.println(name+"-->"+value.name+"-->"+value.score);
        }
    }
}

class Student {
    public String name;
    public int score;

    public Student(String name, int score) {
        this.name = name;
        this.score = score;
    }
}

TreeMap

TreeMap要实现排序的效果,需要Map中的key实现Comparable接口,实现过程参考下面

package com.collection;

import java.util.Comparator;
import java.util.TreeMap;

public class TreeMapDemo1 {
    public static void main(String[] args) {
        //TreeMap中的key必须实现Comparable接口,String,Integer已经默认实现了
        TreeMap<String, Integer> tm = new TreeMap<>();

        tm.put("apple", 1);
        tm.put("pear", 2);
        tm.put("banana", 3);

        for (String key : tm.keySet()) {
            System.out.printf("%s-->%d", key, tm.get(key));
            System.out.println(); //apple-->banana-->pear顺序遍历
        }
        System.out.println("================");

        // 如果作为key的class没有实现Comparable接口,则需要在TreeMap创建时指定一个排序算法
        TreeMap<Student, String> ss = new TreeMap<>(new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                return o1.name.compareTo(o2.name);
            }
        });
        ss.put(new Student("xm", 21), "xiaoming");
        ss.put(new Student("xh", 18), "xiaohong");

        for (Student s: ss.keySet()) {
            System.out.println(ss.get(s));
        }
    }
}

class Student {
    public String name;
    public int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

Collections

Collections是Java提供的一个方便来操作集合的类,常用的方法有:

  1. emptyList(创建空集合)
  2. singletonList(创建单元素集合)
  3. sort(排序)
  4. shuffle(洗牌)
package com.collection;

import java.util.*;

public class CollectionsDemo1 {
    public static void main(String[] args) {
        //创建空集合
        List<String> list1 = Collections.emptyList(); //创建出的空集合无法add元素
        Set<Integer> set1 = Collections.emptySet();
        Map<Integer, String> map1 = Collections.emptyMap();

        System.out.println(list1);
        System.out.println(set1);
        System.out.println(map1);

        System.out.println("====================");
        //创建单元素集合
        List<String> list2 = Collections.singletonList("apple"); //创建的单元素集合也无法add元素
        Set<Integer> set2 = Collections.singleton(111);
        Map<Integer, String> map2 = Collections.singletonMap(1, "apple");

        System.out.println(list2);
        System.out.println(set2);
        System.out.println(map2);

        System.out.println("====================");
        List<String> list3 = new ArrayList<>();
        list3.add("apple");
        list3.add("pear");
        list3.add("banana");
        list3.add("cherry");
        System.out.println(list3); //[apple, pear, banana, cherry]
        //使用Collections排序,排序会改变原有的list顺序
        Collections.sort(list3);
        System.out.println(list3); //[apple, banana, cherry, pear]

        System.out.println("====================");
        //使用Collections洗牌,打乱顺序
        Collections.shuffle(list3);
        System.out.println(list3);
    }
}

后续会补充队列、栈相关内容,暂时没有接触到。

posted @ 2021-02-18 18:16  LucaZ  阅读(22)  评论(0编辑  收藏  举报