泛型-集合总结

集合

一、数组与集合

1.数组与集合概述

集合、数组都是对多个数据进行存储操作的结构,简称Java容器。
说明:此时的存储,主要指的是内存层面的存储,不涉及到持久化的存储(.txt,.jpg,.avi,数据库中)

2.数组存储的特点

  •  > 一旦初始化以后,其长度就不可修改。
    
  •  > 数组中提供的方法非常限,对于添加、删除、插入数据等操作,非常不便,同时效率不高。
    
  •  > 获取数组中实际元素的个数的需求,数组没有现成的属性或方法可用
    
  •  > 数组存储数据的特点:有序、可重复。对于无序、不可重复的需求,不能满足。
    

集合的优点:解决了数组存储数据方面的弊端

二、Collection接口

1.集合框架结构

 |----Collection接口:单列集合,用来存储一个一个的对象
     |----List接口:存储序的、可重复的数据。  -->“动态”数组
         |----ArrayList、LinkedList、Vector

     |----Set接口:存储无序的、不可重复的数据   -->高中讲的“集合”
         |----HashSet、LinkedHashSet、TreeSet

如图所示:

在这里插入图片描述

2.Collection接口的常用方法项目

方法名作用
add(Object obj)添加
addAll(Collection coll)添加
int size()获取有效元素的个数
void clear()清空
boolean isEmpty()是否空集
boolean contains(Object obj)是否包含某个元素
boolean containsAll(Collection c)比较两个集合是都有相同元素
boolean remove(Object obj)删除
boolean removeAll(Collection coll)删除
boolean retainAll(Collection c)取两个元素的交集
boolean equals(Object obj)集合是否相等
Object[] toArray()转成对象数组
hashCode()获取元素的哈希值
iterator()返回迭代器对象,用于集合遍历
@Test
    public void test1() {
        Collection coll = new ArrayList();

            //add(Object e):将元素e添加到集合coll中
        coll.add("AA");
        coll.add("BB");
        coll.add(123); //自动装箱
        coll.add(new Date());

        //size():获取添加元素的个数
        System.out.println(coll.size()); //4

        //addAll 将coll1集合中的元素添加到当前的集合中去
        Collection coll1 = new ArrayList();
        coll1.add(456);
        coll1.add("CC");
        coll.addAll(coll1);

        System.out.println(coll.size()); //6
        System.out.println(coll);

        //clear() 清空元素
        coll.clear();

        //isEmpty() 判断当前集合是否为空
        System.out.println(coll.isEmpty()); //true
    }
 @Test
    public void test1() {
        Collection coll2 = new ArrayList();
        coll2.add(123);
        coll2.add(456);
      //  coll2.add(new String("Tom"));
        coll2.add(false);
        Person p = new Person("Jerry", 20);
        coll2.add(p);
      //1.contains(Object obj):判断当前集合中是否有obj
        boolean contains = coll2.contains(123);
        System.out.println(contains);
       // System.out.println(coll2.contains(p));//true
        System.out.println(coll2.contains(new Person("Terry",20)));//false 因为没有重写

        //2.containsAll(Collection coll1) 判断形参coll1中的所有元素是否都存在于当前集合中
        Collection coll3 = Arrays.asList(123,456);
        System.out.println(coll2.containsAll(coll3));

        //retainAll 交集

        //equals(Object obj) 要想返回true,需要当前集合和形参集合的元素都相同



    }
 @Test
    public void test2(){
        //remove(Object obj) 删除数据
        Collection coll4 = new ArrayList();
        coll4.add(123);
        coll4.add(456);
        coll4.add(new String("Tom"));
        coll4. add(false);
        coll4.add(new Person("Jerry", 20));

        //coll4.remove(123);
        //removeAll 从当前集合中移除coll5中所有元素
      //  Collection coll5 = Arrays.asList(456,false);
       // coll4.removeAll(coll5);
     //   System.out.println(coll4);

        //集合-->数组:toArray()
        Object[] arr = coll4.toArray();
        for (int i = 0;i < arr.length;i++){
            System.out.println(arr[i]);
        }
        //数组-->集合:调用Arrays类的静态方法asList
        List<String> list = Arrays.asList(new String[]{"AA", "BB"});
        System.out.println(list); //[AA, BB]

        List<int[]> arr1 = Arrays.asList(new int[]{123, 456});
        System.out.println(arr1); //[[I@4ee285c6] new认为数组是一个元素
        System.out.println(arr1.size());

        List<Integer> arr2 = Arrays.asList(123, 456);
        System.out.println(arr2);//[123, 456]
        System.out.println(arr2.size());

        //iterator() 返回iterator接口的实例 用于遍历集合元素

    }

3.Collection集合与数组间的转换

 集合 --->数组:toArray()
Object[] arr = coll.toArray();
for(int i = 0;i < arr.length;i++){
    System.out.println(arr[i]);
}
数组 --->集合:调用Arrays类的静态方法asList(T ... t)
List<String> list = Arrays.asList(new String[]{"AA", "BB", "CC"});
System.out.println(list);

List arr1 = Arrays.asList(new int[]{123, 456});
System.out.println(arr1.size());//1

List arr2 = Arrays.asList(new Integer[]{123, 456});
System.out.println(arr2.size());//2

4.使用Collection集合存储对象,要求对象的属性满足

向Collection接口的实现类的对象中添加数据obj时,要求obj所在类要重写equals().
举例:

 @Test
    public void test1(){
        Collection coll = new ArrayList();
        coll.add(123);
        coll.add(456);
        coll.add(new Person("Jerry",20));
        coll.add(new String("Tom"));
        coll.add(false);
        }
public class Person implements Comparable {

    private String name;
    private int age;
    
    public Person(){

    }

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

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

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

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name=" + name +
                ", age=" + age +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return age == person.age &&
                Objects.equals(name, person.name);
    }

    @Override
    public int hashCode() {

        return Objects.hash(name, age);
    }


    //按照姓名从小到大排列
    @Override
    public int compareTo(Object o) {
        if (o instanceof Person) {
            Person person = (Person) o;

            // return this.name.compareTo(person.name); 按照从小到大的顺序排序
            // return -this.name.compareTo(person.name); 按照从大到小的顺序

           //二级排序 先比较姓名 姓名相同再比较年龄
            int compare = this.name.compareTo(person.name);
            if (compare != 0){
                return compare;
            }else {
                return Integer.compare(this.age,person.age);
            }
        } else {
            throw  new RuntimeException("输入的类型不匹配");
        }
    }
}

判断的依据:根据元素所在类的equals方法进行判断,如果Person类没有重写equals方法,则按照Object类,比较的是地址值,如果重写了equals方法,则按照指定的来比较。

三、Iterator接口

四、Map接口

泛型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值