程序中所谓的容器就是收纳、管理数据。数组也不失为一种容器。但是数组创建后长度固定不变,没有容器好用。以下为常见的容器分类
Collection接口
方法
返回值类型 | 方法 |
---|---|
boolean | add(E e) |
boolean | contains(Object o) |
boolean | equals(Object o) |
boolean | isEmpty() |
Iterator | iterator() |
int | size() |
Object[] | toArray() |
实例
public class CollectionDemo02 {
public static void main(String[] args) {
Collection col=new ArrayList();
col.add(1);
System.out.println(col);
//泛型 提高可读性,规范数据的类型
Collection<String> col2=new ArrayList();
col2.add("hehe");
System.out.println(col2);
Collection<Integer> col3=new ArrayList();
col3.add(1);
System.out.println(col3);
//删除 remove()
col2.remove("haha");
System.out.println(col2);
System.out.println(col.contains("哈哈"));
//不能直接把Object[]数组转为其他类型的数组,可以取其中数据
Object[] arr=col2.toArray();
System.out.println(Arrays.toString(arr));
}
}
遍历容器
//遍历:
//for..each
for(String o:col2){
System.out.println(o);
}
//迭代器
//1.获取迭代器对象
Iterator it=col2.iterator();
//2.判断是否有下一个元素
while(it.hasNext()){
//3.获取下一个元素
System.out.println(it.next());
}
一、List接口
List与 Set 不同是List
接口列表通常允许重复的元素。List接口继承Collection接口,没有新的方法
List接口的实现类:ArrayList、LinkedList
1、ArrayList
ArrayList实现类实现List接口,通过可变数组实现的,没有自定义新的方法,使用copyOf方法进行动态扩容,为原容量的1.5倍
2、LinkedList
Linked实现类实现List接口,底层通过 双向链表实现,新增了一些操作与链表头尾的方法
方法
返回值类型 | 方法 |
---|---|
void | addFirst(E e) |
void | addLast(E e) |
E | getFirst() |
E | getLast() |
实例
public static void main(String[] args) {
LinkedList<String> ll = new LinkedList();
ll.add("你好");
ll.add("我好");
ll.add("好");
ll.addFirst("我是头");
ll.addLast("我是尾");
System.out.println(ll.element());
System.out.println(ll.get(1));
System.out.println(ll.indexOf("你好"));
System.out.println(ll.toString());
}
二、Set接口
Set接口继承自Collection,Set接口中没有新增方法,方法和Collection保持完全一致。Set中的元素没有索引,我们只能遍历查找。添加的数据不可重复。
1、HashSet
HashSet
是Set接口的实现类是通过HashMap实现,底层又数组链表或者红黑树构成。
存放基本数据类型和String类会实现自动去重。
例子
public class SetDemo02 {
public static void main(String[] args) {
HashSet<String> hash=new HashSet();
hash.add("哈哈");
hash.add("哈哈");
hash.add("哈哈");
hash.add("哈哈");
hash.add("哈哈");
System.out.println(hash);
}
}
结果为[哈哈]
引用数据类型存入时,需要重写重写hashcode和equals方法才能实现去重。
2、TreeSet
HashSet
是Set接口的实现类是通过红黑树构成,存放基本数据类型和String类会实现自动去重。如果存放引用数据类型的话,可以定义比较规则,排序规则,并且可以使用去重原则。
比如TreeSet存放Person类
此方法是内部比较器也称自然排序: 实现Comparable接口,重写comparaTo方法,在方法中定义比较规则.,默认的比较规则。如果.o.age-this.age
>0传入的参数放右边,<0放左边。==0去重不存入。
package com.shsxt.set01;
public class Person implements Comparable<Person> { //泛型T - 可以与此对象进行比较的那些对象的类型
//public class Person {
private String name;
private int age;
//根据年龄进行比较,年龄相同就是一个对象
@Override
public int compareTo(Person o) {
return o.age-this.age;
}
}
下一篇讲解Map接口及实现Map接口的类。欢迎继续追更。