Java集合类之---(类集,Collection集合接口,List集合接口,Set集合接口)

类集

  • 类集实际上就属于动态对象数组

Collection集合接口

  • java的类集里面提供了两个最为核心的接口:Collection,Map
  • Collection接口的操作形式与链表的操作形式相似,每一次只能对单个对象进行处理
  • Collection是单个集合保存的最大父接口
public  interface  Collection<E>  extands  Iterable<E>
  • Collection接口有泛型应用,可以避免ClassCastException,里面的所有数据的保存类型应该是相同的
  • 接口中的常用方法
NO 方法名称 类型 描述
1 public boolean add(E e) 普通 向集合中添加数据
2 public boolean addAll(Collection<? extands E>c) 普通 向集合中添加一组数据
3 public void clear() 普通 清空集合数据
4 public boolean contains(Object o) 普通 查找数据是否存在,需要使用equals()方法
5 public boolean remove(Object o) 普通 删除数据,需要equals()方法
6 public Object[] toArray() 普通 将集合变为对象数组返回
7 public int size() 普通 取得集合长度
8 public Iteratoriterator() 普通 取得Iterator接口对象,用于集合输出
  • 在实际开发应用中,我们往往使用Collection接口的子接口List(允许数据重复),Set(不允许数据重复)
  • Collection接口中有两个重要方法:add()、iterator()。子接口都有这两个方法。

子接口List接口

  • List接口提供的方法
No 方法名称 类型 描述
1 public E get(int index) 普通 根据索引取得保存数据
2 public E set(int index,E element) 普通 修改数据
  • List本身是一个接口,因此要想取得接口的实例化对象,必须有子类;List接口下有三个常用子类:ArrayList,Vector,LinkedList
ArrayList子类
  • 针对于List接口的数组实现
public class Collect {
    public static void main(String[] args) {
    //此时集合里面只保存String类型
       List<String> list = new ArrayList<>();
        list.add("hello");
        list.add("world");
        list.add("hello");
        System.out.println(list);
        System.out.println(list.contains("world"));
        System.out.println(list.remove("hello"));
        list.clear();
        System.out.println(list.size());
        }
   }
  • List存在get()方法,可以利用get()方法结合索引取得数据
 for(int i = 0;i<list.size();i++){
            System.out.println(list.get(i)+",");
            }
  • get()方法是List子接口提供的,如果现在操作的是Collection接口,那么对于此时的数据取出只能够将集合变为对象数组操作
Collection<String> list = new ArrayList<>();
        list.add("hello");
        list.add("hello");
        list.add("world");
        Object[] result = list.toArray();
        System.out.println(Arrays.toString(result));
集合与简单java类
  • 在以后的应用中,集合里面保存最多的数据类型是简单java类
  • 向集合保存简单Java类对象
class Person1{
    private String name;
    private int age;
    public Person1(String name,int age){
        this.name = name;
        this.age = age;
    }

    @Override
    public boolean equals(Object obj) {
        if(this == obj){
            return true;
        }
        if(obj == null){
            return false;
        }
        if(!(obj instanceof Person1)){
            return false;
        }
        //向下转型为Person1对象比较属性
        Person1 per = (Person1) obj;

        return this.age == per.age && name.equals(per.name);
    }


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


}
public class Collect {
    public static void main(String[] args) {
    List<Person1> list = new ArrayList<>();
        Person1 per1 = new Person1("zhang",18);
        Person1 per2 = new Person1("wang",21);
        Person1 per3 = new Person1("li",23);
        list.add(per1);
        list.add(per2);
        list.add(per2);
        System.out.println(list.contains(new Person1("wang",21)));
        System.out.println(list.contains(per2));



    }
}

子类Vector
 public static void main(String[] args) {
        List<String> list = new Vector<>();
        list.add("hello");
        list.add("hello");
        list.add("world");
        System.out.println(list);
        list.remove("hello");
        System.out.println(list);
    }
ArrayList与Vector的区别
  • 产生版本: Vector是JDK1.0产生; ArratList是JDK1.2产生。

  • 线程安全: Vector采用在方法上添加synchronized来保证线程安全,性能较低;ArrayList采用异步处理,性能较高,线程不安全

  • 初始化以及扩容策略: Vector对象产生时就初始化数组长度为10,当数组长度不够用时,扩容策略变为原来数组的2倍;ArratList使用懒加载策略,在第一次添加元素时才初始化数组大小,当数组不够用时,扩容为原数组的1.5倍

子类LinkedList
  • 这个子类如果向父接口转型的话,使用形式与之前没有任何区别
  • ArrayList封装的是数组;LinkedList封装的是链表。
  • ArrayList时间复杂度为1,而LinkedList的复杂度为n。

Set集合接口

  • 在Set子接口中有两个常用子类:HashSet(无序存储),TreeSet(有序存储)
  • Set接口没有对Collection接口进行扩充,所以没有get()方法
HashSet的使用
Set<String> set = new HashSet<>();
       set.add("hello");
       set.add("bit");
       set.add("java");
       set.add("hello");
        System.out.println(set);
结果无序排列;结果不包含重复元素
TreeSet的使用
  • TreeSet使用的是升序排列的模式完成的
 Set<String> set = new TreeSet<>();
       set.add("C");
       set.add("B");
       set.add("C");
       set.add("A");
        System.out.println(set);

结果有序排列;结果不包含重复元素

猜你喜欢

转载自blog.csdn.net/WZL995/article/details/85533976