Java从入门到精通 第14章 集合类

目录

Collection接口

List集合

Set集合

Map集合


Collection接口

  • List和Set接口都继承了Collection接口,因此这些方法对List和Set集合是通用的
  • 遍历通过iterator()方法返回迭代器,Iterator的next()返回的是Object

List集合

  • 允许重复,有序,可用索引查询
  • LIst接口继承了Collection接口,包含Collection中的所有方法,还包括两个重要的方法get(int index); 获取指定位置元素set(int index, Object obj); 将集合中指定位置对象修改为指定的对象
  • 实例化List集合
    • List<E> list = new ArrayList<>();  可以根据索引快速随机访问,插入、删除删除速度慢
    • List<E> list = new LinkedList<>();  随机访问速度慢,插入、删除速度快
package ex14_Collection;


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

public class Muster {
    public static void main(String args[]) {
        Collection<String> list = new ArrayList<>();  //实例化集合类对象
        list.add("a");
        list.add("b");
        list.add("c");
        Iterator<String> it = list.iterator();  //创建迭代器
        while (it.hasNext()) {  //判断是否还有下一个元素
            String str = (String) it.next();  //获取集合中的元素
            System.out.println(str);
        }

        //随机获取一个字母,删除索引为2的元素
        List<String> list1 = new ArrayList<>();  //创建集合对象
        list1.add("1");
        list1.add("2");
        list1.add("2");
        int i = (int) (Math.random() * list.size());
        System.out.println("随机访问:" + list1.get(i));
        list1.remove("2"); // 删除对象
        list1.remove(1);  //删除索引位置的对象
        for (int j = 0; j < list1.size(); j++) {  //遍历集合
            System.out.print(list1.get(j) + " ");
        }
    }
}

Set集合

  • 不能重复,无序
  • Set接口常用的实现类有HashSet类和TreeSet类
    • HashSet不保证Set的迭代顺序,允许使用null元素
    • TreeSet实现了Set接口,还实现了java.util.SortedSet接口,TreeSet类实现的Set集合在遍历时按照自然顺序递增排序,也可以按照指定比较器排序
  • 存入TreeSet类实现的Set集合必须实现Comparable接口,该接口中的compareTo(Object o)方法比较此对象与指定对象的顺序

package ex14_Collection;


import java.util.Iterator;
import java.util.TreeSet;

public class UpdateStu implements Comparable<Object> {  //创建类实现Comparable接口
    String name;
    long id;

    public UpdateStu(String name, long id) {
        this.name = name;
        this.id = id;
    }

    public int compareTo(Object o) {
        UpdateStu upstu = (UpdateStu) o;
        int result = id > upstu.id ? 1 : (id == upstu.id ? 0 : -1);
        return result;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public static void main(String[] args) {
        UpdateStu stu1 = new UpdateStu("李同学", 1011);
        UpdateStu stu2 = new UpdateStu("陈同学", 1021);
        UpdateStu stu3 = new UpdateStu("王同学", 1031);
        UpdateStu stu4 = new UpdateStu("马同学", 1041);
        TreeSet<UpdateStu> tree = new TreeSet<>();
        tree.add(stu1);
        tree.add(stu2);
        tree.add(stu3);
        tree.add(stu4);
        Iterator<UpdateStu> it = tree.iterator();  //Set集合中的所有对象的迭代器
        System.out.println("Set中所有元素:");
        while (it.hasNext()) {  //遍历集合
            UpdateStu stu = (UpdateStu) it.next();
            System.out.println(stu.getId() + " " + stu.getName());
        }

        it = tree.headSet(stu2).iterator();  //截取stu2之前的对象
        System.out.println("截取前面部分的集合:");
        while (it.hasNext()) {  //遍历集合
            UpdateStu stu = (UpdateStu) it.next();
            System.out.println(stu.getId() + " " + stu.getName());
        }

        it = tree.subSet(stu2, stu4).iterator();  //截取stu2-stu4之间的对象
        System.out.println("截取中间部分的集合:");
        while (it.hasNext()) {  //遍历集合
            UpdateStu stu = (UpdateStu) it.next();
            System.out.println(stu.getId() + " " + stu.getName());
        }

    }

}

Map集合

  • Map接口没有继承Collection接口,提供的是key到value的映射,Map中不能包含相同的key
  • Map接口常用的实现类有HashMap和TreeMap
    • HashMap是基于哈希表的Map接口的实现,添加删除映射关系效率高,允许使用null值和null键,不保证映射顺序
    • TreeMap不仅实现了Map接口,还实现了java.util.SortedMap接口,集合中的映射关系有一定的顺序因此键不允许为null,添加删除映射关系效率低
    • keySet()返回Set集合,values返回Collection集合
  • 可以通过HashMap创建Map集合,当需要顺序输出时,再创建一个完成相同映射关系的TreeMap类实例

package ex14_Collection;


import java.util.*;

public class UpdateStu2 {
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<>();  //创建Map实例
        map.put("01", "李同学");  //向集合中添加对象
        map.put("02", "魏同学");
        map.put("03", "魏同学");
        map.put("04", null); //会被打印出来
        Set<String> set = map.keySet();  //构建Map集合中所有key对象的集合
        Iterator<String> it = set.iterator();  //创建集合迭代器
        System.out.println("key集合中的元素:");
        while (it.hasNext()) {
            System.out.println(it.next());
        }
        Collection<String> coll = map.values();  //构建Map集合中所有values值的集合
        it = coll.iterator();
        System.out.println("values集合中的元素");
        while (it.hasNext()) {
            System.out.println(it.next());
        }

    }
}
package ex14_Collection;

public class Emp {
    private String e_id;
    private String e_name;

    public Emp(String e_id, String e_name) {
        this.e_id = e_id;
        this.e_name = e_name;
    }

    public String getE_id() {
        return e_id;
    }

    public String getE_name() {
        return e_name;
    }

    public void setE_id(String e_id) {
        this.e_id = e_id;
    }

    public void setE_name(String e_name) {
        this.e_name = e_name;
    }
}
package ex14_Collection;

import java.util.*;

public class MapText {
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<>();

        Emp emp = new Emp("351", "张三");  //创建Emp对象
        Emp emp2 = new Emp("512", "李四");
        Emp emp3 = new Emp("853", "王一");
        Emp emp4 = new Emp("125", "赵六");
        Emp emp5 = new Emp("341", "黄七");

        map.put(emp.getE_id(), emp.getE_name());  //添加对象到集合中
        map.put(emp2.getE_id(), emp2.getE_name());
        map.put(emp3.getE_id(), emp3.getE_name());
        map.put(emp4.getE_id(), emp4.getE_name());
        map.put(emp5.getE_id(), emp5.getE_name());

        Set<String> set = map.keySet();  //获取Map集合中的key对象集合
        Iterator<String> it = set.iterator();
        System.out.println("HashMap集合类实现的Map集合,无序:");
        while (it.hasNext()) {
            String str = (String) it.next();
            String name = (String) map.get(str);
            System.out.println(str + " " + name);
        }

        TreeMap<String, String> treeMap = new TreeMap<>();  //创建TreeMap集合对象
        treeMap.putAll(map);
        Iterator<String> iter = treeMap.keySet().iterator();
        System.out.println("TreeMap类实现的Map集合,键值升序:");
        while (iter.hasNext()) {
            String str = (String) iter.next();
            String name = treeMap.get(str);
            System.out.println(str + " " + name);
        }

    }
}
发布了46 篇原创文章 · 获赞 0 · 访问量 1024

猜你喜欢

转载自blog.csdn.net/weixin_37680513/article/details/103482515