JAVA-集合类概述(笔记)

图片描述

1.Collection接口是层次结构中的跟接口。Collection接口通常不能直接使用,但该接口提供了添加元素,删除元素,管理数据的方法。
Collection通常使用矢代器(Iterator)来实现遍历集合。
代码:

import java.util.*;

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

结果:
图片描述

2.List集合:
List集合中的元素应许重复,各元素的顺序就是对象插入的顺序。
LIst接口继承了Collection接口,此外还定义了两个非常重要的方法:

get(int index): 获取指定索引位置的元素。
set(int index,Object obj) : 将集合中指定索引位置的对象改成指定的对象。

List接口的常用实现类有ArrayList 与 LinkedList。

a、ArrayList优点:随机访问速度快,缺点:删除或插入对象的速度慢。
b、LinkedList 正好相反。
代码:

import java.util.*;

public class Gather { // 创建类Gather
    public static void main(String[] args) { // 主方法
        List<String> list = new ArrayList<>(); // 创建集合对象
        list.add("a"); // 向集合添加元素
        list.add("b");
        list.add("c");
        int i = (int) (Math.random() * (list.size() - 1)); // 获得0~1之间的随机数
        System.out.println("随机获取数组中的元素:" + list.get(i));
        list.remove(2); // 将指定索引位置的元素从集合中移除
        System.out.println("将索引是'2'的元素从数组移除后,数组中的元素是:");
        for (int j = 0; j < list.size(); j++) { // 循环遍历集合
            System.out.println(list.get(j));
        }
        System.out.println("最终集合中元素的个数:"+list.size());
        //用矢代器遍历集合
        Iterator<String>it = list.iterator();
        while(it.hasNext()){
            String str = (String)it.next();
            System.out.println(str);
        }
    }
}

结果:
图片描述

3.Set集合
Set集合不按特定的顺序排序,只是简单把对象加入到集合中,但不能包含重复对象
Set接口常用的实现类有HashSet类与Tree类。Set继承了Comparable 接口。这个接口可参考JAVA API文档

a、HashSet类有哈希表,遍历的对象随机
b、TreeSet类遍历数组不仅可以按照自然顺序排序,还可以按照指定顺序排序。

代码:

import java.util.*;
public class UpdateStu implements Comparable<Object> {
    String name;
    long id;
    public UpdateStu(String name, long id) {
        this.id = id;
        this.name = name;
    }
    public int compareTo(Object o) {
        UpdateStu upstu = (UpdateStu) o;
        int result = id > upstu.id ? 1 : (id == upstu.id ? 0 : -1);
        return result;
    }
    public long getId() {
        return id;
    }
    public void setId(long id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public static void main(String[] args) {
        UpdateStu stu1 = new UpdateStu("厦门", 00001);
        UpdateStu stu2 = new UpdateStu("北京", 00002);
        UpdateStu stu3 = new UpdateStu("上海", 00003);
        UpdateStu stu4 = new UpdateStu("广州", 00004);
        TreeSet<UpdateStu> tree = new TreeSet<>();
        tree.add(stu1);
        tree.add(stu2);
        tree.add(stu3);
        tree.add(stu4);
        Iterator<UpdateStu> it = tree.iterator();
        System.out.println("Set集合中的所有元素:");
        while (it.hasNext()) {
            UpdateStu stu = (UpdateStu) it.next();
            System.out.println(stu.getId() + " " + stu.getName());
        }
        it = tree.headSet(stu2).iterator();
        System.out.println("截取前面部分的集合:");
        while (it.hasNext()) {
            UpdateStu stu = (UpdateStu) it.next();
            System.out.println(stu.getId() + " " + stu.getName());
        }
        it = tree.subSet(stu2, stu3).iterator();
        System.out.println("截取中间部分的集合");
        while (it.hasNext()) {
            UpdateStu stu = (UpdateStu) it.next();
            System.out.println(stu.getId() + " " + stu.getName());
        }
    }
}

结果:
图片描述

补充:
细心的同学会发现上面的程序是继承 Comparable 这个类的,且里面用到了compareTo方法,这好似接口中的方法,可以重写该方法,返回的值就决定了Set集合遍历数组的排序。这就是TreeSet可以自定义排序的秘密所在。

/*例如:pojo复写了compareTo ()方法以后,对放入set集合的对象会根据compareTo ()方法的返回值进行排序,如果ast.height-this.height 为负值就是降序,以后每次比较正的放后面 负的放前面。*/

int result = id > upstu.id ? 1 : (id == upstu.id ? 0 : -1);

/*三元运算:  如果 id>upstu,return 1 ,否则 return (id == upstu.id ? 0 : -1)*/

4.Map集合:
Map没有继承Collection接口,它是提供key到value的映射,来决定遍历对象的顺序
注意每个key只能映射一个值。
代码:
先创建Emp,获得对象

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 void setE_id(String e_id) {
        this.e_id = e_id;
    }
    public String getE_name() {
        return e_name;
    }
    public void setE_name(String e_name) {
        this.e_name = e_name;
    }

}

在创建 MapText 遍历对象

import java.util.*;

public class MapText { // 创建类MapText
    public static void main(String[] args) { // 主方法
        Map<String,String> map = new HashMap<>(); // 由HashMap实现的Map对象
        Emp emp = new Emp("001", "厦门");
        Emp emp2 = new Emp("005", "上海"); // 创建Emp对象
        Emp emp3 = new Emp("004", "北京");
        map.put(emp.getE_id(), emp.getE_name());
        map.put(emp2.getE_id(), emp2.getE_name()); // 将对象添加到集合中
        map.put(emp3.getE_id(), emp3.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); // 遍历Map集合
            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()) { // 遍历TreeMap集合对象
            String str = (String) iter.next(); // 获取集合中的所有key对象
            String name = (String) treemap.get(str); // 获取集合中的所有values值
            System.out.println(str + " " + name);
        }
    }
}

结果:
图片描述
补充:
使用Map集合需要先获取Map集合中的Key对象,再根据这个key映射对value进行遍历,key获取的顺序决定value排列的顺序。

Set<String> set = map.keySet(); // 获取Map集合中的key对象集合
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值