#千锋逆战班# 第24天Collection集合类 #学习笔记#

Collection接口下的实现类(一)

继承关系图

Collection接口

• 特点:代表一组任意类型的对象,无序、无下标

  • 接口方法
    • boolean add(Object obj) //添加一个对象。

    • boolean addAll(Collection c) //将一个集合中的所有对象添加到此集合中。

    • void clear() //清空此集合中的所有对象。

    • boolean contains(Object o) //检查此集合中是否包含o对象 。

    • boolean equals(Object o) //比较此集合是否与指定对象相等。

    • boolean isEmpty() //判断此集合是否为空。

    • boolean remove(Object o) //在此集合中移除o对象。

    • int size() //返回此集合中的元素个数。

    • Object[] toArray() //将此集合转换成数组。

1、List接口(继承Collection)

• 特点:有序、有下标、元素可以重复

  • 接口方法

    • void add(int index, Object o) //在index位置插入对象o。

    • boolean addAll(int index, Collection c) //将一个集合中的元素添加到此集合中的 index位置。

    • Object get(int index) //返回集合中指定位置的元素。

    • List subList(int fromIndex, int toIndex) //返回fromIndex和toIndex之间的集合元 素。

  • 实现类

    • ArrayList

    • 数组结构实现,查询快、增删慢;
    • ArrayList比较适合顺序添加、随机访问的场景
    • JDK1.2版本,运行效率快、线程不安全

    //List集合,有序,有下标,元素可重复
        List<Integer> list = new ArrayList<>();
    
        //向集合中添加元素
        list.add(5);
        list.add(13);
        list.add(3);
        list.add(7);
        list.add(5);
        list.add(21);
        list.add(36);
    
        //删除集合中的元素
        list.remove(2); //删除下标为2的那个元素
        list.remove((Integer)7);    //删除等于7的那个元素
        printList(list);    //打印集合元素
    
        //修改集合中的元素
        list.set(2,99); //修改下标为2的元素为99
    
        //查找元素
        int num =list.get(4); 
    
    • LinkedList

    • 链表结构实现,增删快,查询慢。
    • LinkedList适合频繁的指定插入,删除操作。
    • 实现原理不同,占用空间比ArrayList更少,方法几乎相同。

    //比ArrayList更节省空间,插入指定元素更快,但是访问地址更慢
        List<String> list = new LinkedList<>();
    
        //插入
        list.add("C");
        list.add("Java");
        list.add("C++");
        list.add("Python");
        list.add("PHP");
        list.add("MySql");
    
        //删除
        list.remove("C");
        //修改
        list.set(1,"JavaScript");
        //查找
        list.get(4);
    
        //打印
        for(String str : list){
            System.out.println(str);
        }
    
    • Vector(不常用)

    • 数组结构实现,查询快、增删慢; • JDK1.0版本,运行效率慢、线程安全。

2、Set接口(继承Collection)

• 特点:无序、无下标、元素不可重复

  • 接口方法: 全部继承自Collection中的方法

  • 实现类

    • HashSet

    • 基于HashCode实现元素不重复。
    • 当存入元素的哈希码相同时,会调用equals进行确认,如结果为true,则拒绝后者存入

    //哈希表,HashSet
    Set<Person> set = new HashSet<>();
    
    /*
     * 插入时,先根据哈希值再根据equals方法判断是否插入对象
     * 如果哈希值不同,则不会根据equals方法判断
     * 如果哈希值相同,则会继续根据equals方法判断,如果不同,执行插入,如果相同,不执行插入
     */
    set.add(new Person("张三",16));
    set.add(new Person("张三",11));	//无法被加入集合中
    set.add(new Person("李四",22));
    set.add(new Person("李芬",21));
    set.add(new Person("王德发",17));
    
    Iterator it = set.iterator();
    while (it.hasNext()){
    	System.out.println(it.next());
    }
    
    //人类
    class Person{
    	private String name;	//姓名
    	private int age;	//年龄
    
    	//get、set方法
    	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 Person() { }
    	public Person(String name, int age) {
        	this.name = name;
        	this.age = age;
    	}
    
    	//重写了equals方法
    	@Override
    	public boolean equals(Object o) {
        	if (this == o) return true;
        	if (o == null || getClass() != o.getClass()) return false;
        	Person person = (Person) o;
        	return name.equals(person.getName());
    	}
    
    	//重写了哈希码方法
    	@Override
    	public int hashCode() {
        	return Objects.hash(name);
    	}
    
    	@Override
    	public String toString() {
        	return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    	}
    	
    }
    

3、Iterator迭代器

• 通过Collection实现类的iterator()的方法返回的迭代器

//创建一个可以存储Integer 的ArrayList集合
List<Integer> list = new ArrayList<>();	//<>泛型

//向集合中添加元素
list.add(5);
list.add(13);
list.add(3);
list.add(7);
list.add(5);
list.add(21);
list.add(36);

Iterator it1 = list.iterator();	//返回集合的迭代器

while(it1.hasNext()){	//判断是否有下一个元素
	System.out.print(it1.next()+",");	//打印下一个元素
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>