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

集合类的主要内容
类集
Collection集合接口
子接口List接口
ArrayList子类
集合与简单java类
子类Vector
ArrayList与Vector的区别
子类LinkedList
Set集合接口
HashSet的使用
TreeSet的使用
类集
类集实际上就属于动态对象数组;
Collection集合接口
java的类集里面提供了两个最为核心的接口:Collection,Map
Collection接口的操作形式与链表的操作形式相似,每一次只能对单个对象进行处理
Collection是单个集合保存的最大父接口
public interface Collection extands Iterable
1
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 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());
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
List存在get()方法,可以利用get()方法结合索引取得数据
for(int i = 0;i<list.size();i++){
System.out.println(list.get(i)+",");
}
1
2
3
get()方法是List子接口提供的,如果现在操作的是Collection接口,那么对于此时的数据取出只能够将集合变为对象数组操作
Collection list = new ArrayList<>();
list.add(“hello”);
list.add(“hello”);
list.add(“world”);
Object[] result = list.toArray();
System.out.println(Arrays.toString(result));
1
2
3
4
5
6
集合与简单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 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));

}

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
子类Vector
public static void main(String[] args) {
List list = new Vector<>();
list.add(“hello”);
list.add(“hello”);
list.add(“world”);
System.out.println(list);
list.remove(“hello”);
System.out.println(list);
}
1
2
3
4
5
6
7
8
9
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 set = new HashSet<>();
set.add(“hello”);
set.add(“bit”);
set.add(“java”);
set.add(“hello”);
System.out.println(set);
结果无序排列;结果不包含重复元素
1
2
3
4
5
6
7
TreeSet的使用
TreeSet使用的是升序排列的模式完成的
Set set = new TreeSet<>();
set.add(“C”);
set.add(“B”);
set.add(“C”);
set.add(“A”);
System.out.println(set);

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值