集合框架

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2IH2DQHN-1589618084726)(http://www.njlife123.com/upload/2020/05/praqdfjm3ki4cpufsr45vv480c.png)]

List

List的特点:有序(迭代顺序和添加顺序保持一致),可以重复

ArrayList

基于数组的实现

在容器中添加元素:Collection

//向列表的尾部添加元素
boolean add(E e);

获取容器中的元素: List

//返回列表中指定位置元素
 E get(int index);

获得容器中元素的个数: Collection

 //返回列表元素个数
 int size();

修改容器中的元素: List

 //用指定的元素替换列表的元素
 E set(int index, E element);

移除容器中的元素: List

//移除列表指定元素
boolean remove(Object o);

遍历所有元素:Collection

 //返回迭代器
 Iterator<E> iterator();

Iterator接口中的方法:

 //判断迭代器是否还有下一个元素
 boolean hasNext();
 //获取下一个元素
 E next();

ArrayList基本应用:

 public static void main(String[] args) {
        List list = new ArrayList();

        list.add("11111");
        list.add("22222");
        list.add("33333");

        list.add(new Integer(1));
        list.remove(0);//根据下标移除
        list.remove("11111");//根据元素移除
        list.set(1,"rrrrrr");//修改指定位置元素

        System.out.println(list.size());//获取元素总数

        for (int i=0;i<list.size();i++){
            System.out.println(list.get(i));//访问元素
        }

    }

ArrayList使用迭代器迭代:

 public static void main(String[] args) {
        List list = new ArrayList();

        list.add("11111");
        list.add("22222");
        list.add("33333");

        list.add(new Integer(1));
        list.remove(0);//根据下标移除
        list.remove("11111");//根据元素移除
        list.set(1,"rrrrrr");//修改指定位置元素

        Iterator iterator = list.iterator();

        if(iterator.hasNext()){
            System.out.println( iterator.next());
        }

    }

增强for循环:

 public static void main(String[] args) {
        List<String> list = new ArrayList();

        list.add("11111");
        list.add("22222");
        list.add("33333");

        for (String str:list) {
            System.out.println(str);
        }
    }

使用ArrayList保存自定义对象:

public class Stu {
    
    private String name;
    
    private int age;

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
 public static void main(String[] args) {
        List<Stu> list = new ArrayList();

        list.add(new Stu("tom",20));
        list.add(new Stu("lili",12));
        list.add(new Stu("didi",44));

        for (Stu stu:list) {
            System.out.println(stu.getName());
        }
    }

LinkedList

基于双向链表的实现

基本应用:

 public static void main(String[] args) {
        List list = new LinkedList();

        list.add("11111");
        list.add("22222");
        list.add("33333");

        list.add(new Integer(1));
        list.remove(0);//根据下标移除
        list.remove("11111");//根据元素移除
        list.set(1,"rrrrrr");//修改指定位置元素

        System.out.println(list.size());//获取元素总数

        for (int i=0;i<list.size();i++){
            System.out.println(list.get(i));//访问元素
        }

    }

LinkedList中添加了一些特定的对头,尾数据操作的方法:

alt

alt

alt

alt

要使用这些方法,声明时,就要适用LinkedList

 public static void main(String[] args) {
        LinkedList list = new LinkedList();
        list.add("11111");
        list.add("22222");
        list.add("33333");
        list.addLast("8888");//添加在最后
        list.removeFirst();//移除一个
    }

ArrayList和LinkedList的适用场合

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-88hHQy9p-1589618084750)(http://www.njlife123.com/upload/2020/05/05thvdqq28jttomck9ks84flob.png)]

常用操作是删除或者插入,适用LinkedList

常用操作是遍历,适用ArrayList

Set

特点:无序(迭代顺序和添加顺序不一致),不能重复

HashSet

HashCode()和equals()的常规协定:
2个对象equals()相等,hashCode()一定相等
2个对象hashCode()相等,equals ()不一定相等

HashSet如何判断是否重复:
1.先用hashCode()判断
2.如果hashCode()相等,再用equals()判断

//伪代码表示:
If(hashCode()相等){
	If(equals()相等){
		已经存在,不加入集合
}else{
	是新元素,加入集合
}
}else{
	是新元素,加入集合
}

基本用法:

alt

假如自定义对象要使用HashSet存放,其应该重写equals和hashCode方法,并符合常规协定:

例如:

alt

测试代码:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D886Q2hn-1589618084756)(http://www.njlife123.com/upload/2020/05/11cbhsks4ogr5rei2vhamc41n5.png)]

TreeSet

自然顺序:实现了Comparable接口, 此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序。

alt

比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。

TreeSet的使用:

使用空参构造,对象本身必须有自然顺序

alt

使用下面的构造,传入一个比较器,在比较器中定义比较规则,此时对象本身可以不实现Comparable接口

alt

比较器如何实现:
实现Comparator接口,实现compare方法:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hD3ENn4a-1589618084766)(http://www.njlife123.com/upload/2020/05/12nrt6igrogc7q2uifktid1qk7.png)]

比较用来排序的两个参数。根据第一个参数小于、等于或大于第二个参数分别返回负整数、零或正整数

使用TreeSet的2种方式:
1.对象本身实现Comparable接口

例如:

alt

测试代码:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fzqz0LAe-1589618084769)(http://www.njlife123.com/upload/2020/05/2vla91glg6id0o550nm2uql6ni.png)]

2.对象本身不实现Comparable接口,在比较器中定义比较规则

例如:

alt

自定义比较器:

alt

测试代码:

alt

Map

HashMap

基于散列表的键值对实现:根据key的hashCode,计算其在数组中保存的位置,将其保存到对应位置,假如key重复,用新值替换旧值。

基本用法:

alt

遍历方式一:

alt

alt

遍历方式二:

alt

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A8tvYreO-1589618084784)(http://www.njlife123.com/upload/2020/05/7e0cp1sn08hfap9c3ajdt7kst7.png)]

遍历方式三:

alt

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UhuX4bxU-1589618084787)(http://www.njlife123.com/upload/2020/05/raq8luj1k6gn0ocbjcsl4n7ec1.png)]

TreeMap

键必须有自然顺序或者构造TreeMap时传入比较器,做法同TreeSet

alt

工具类Collections

包含对集合的常用操作方法:

alt

alt

alt

代码:

alt

历史集合类

Vector和ArrayList
HashTable和HashMap

前者是线程安全的,后者是线程不安全的

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值