9.24 集合学习总结
集合:就是用来储存数据的容器。
集合与数组的区别:
1.集合能储存不同的类型元素,数组只能储存单一的类型元素。
2.数组的长度是固定的,集合的长度是不固定的。
3.数组的储存类型可以是基本类型和引用类型,而集合只能储存引用类型。
Collection是所有集合类的顶级类。
Collection的主要常用方法:
1.添加功能
add(E e).
主要用来添加指定元素。添加成功则返回true.
Collection<String> a = new ArrayList<>();
boolean add = a.add("张三");
System.out.println(add);//返回的是true;
addAll(Collection<? extends E> c)
指向该集合添加指定集合中的所有元素。
2.删除功能
clear().
删除该元素中的所有元素。
remove(Object obj)
删除该集合中的某元素。
removeAll(Collection<?> c)
删除该集合中所有包含指定集合内的所有元素。
例子:
Collection<String> a2 = new ArrayList<>();
a2.add("李四");
a2.addAll(c);
System.out.println(a2);
a2.remove("李四");
System.out.println(a2);
c2.removeAll(a);
System.out.println(c2);
3.判断功能
contains(Object o)
判断该集合是否包含指定元素。返回值是boolean类型的值。
contains(Collection<?> c)
判断该集合中是否包含指定集合中的所有元素。返回值是boolean类型的值。
isEmpty()
判断集合是否为空。
boolean contains = a2.contains("王五");
System.out.println(contains);//false
boolean containsAll = a2.containsAll(a);
System.out.println(containsAll);
a.clear();
boolean empty = a.isEmpty();
System.out.println(empty);//true
4.获取元素功能。
Iterator<E> iterator()
返回此集合中的元素的迭代器。
boolean hasNext()
如果迭代具有更多元素,则返回 true 。
E next()
返 一个元素。
例子:
Iterator<String> iterator = a2.iterator();
while(iterator.hasNext()){ //如果有更多的元素就执行循环体
String next = iterator.next(); //返回指定类型的元素
System.out.println(next);
}
5.长度功能。
size()
得到该集合的元素个数。
6.交集。
retainAll(Collection<?> c)
得到该集合与指定集合的交集元素并保存到该集合中,判断该集合是否有改变,如果集合没有改变则返回true。
7.将集合转换成数组。
Object[] toArray()
返回一个包含此集合中所有元素的数组。
Collection主要分为List子接口和set接口。
List集合的特有功能:
1.添加功能
void add(int index, E element):在指定位置添加元素。
2.获取功能
E get(int index):获取指定位置的元素
3.列表迭代
listIterator():List集合特有的迭代器
4.删除功能
remove(int index):通过索引值去删除,返回被删除的元素
5.修改功能
E set(int index, E element):根据索引修改元素,返回的被修改的元素
特点:元素是有序的(怎样放进去就怎样显示),内容可以重复
List接口的主要实现类有:
ArrayList:数组结构,查询快,增删改慢。
LinkedList:链表结构,查询慢,增删改快。
Vector:增删查改都慢。
List常用方法:
void add(int index,E e)
将某一元素,插入到此集合的下标index处。
E get(int index)
返回指定下标上的元素
int indexOf(Object obj)
返回指定元素第一次出现的位置。如果没有,返回-1.
Set接口
特点:元素是无序的,内容不可以重复。
hashSet: 不保证Set的迭代顺序。
treeSet: 能够对元素进行某种规则排序。主要分为自然排序和比较器排序。
自然排序:
让元素所属的类实现自然排序接口Comparable
比较排序:
让集合的构造方法接受一个比较器接口的实现类或者匿名内部类的形式 Comparator
TreeSet例子:
TreeSet<Student> ts2 = new TreeSet<>(new Comparator<Student>() {
@Override
public int compare(Student s1, Student s2) {
// TODO Auto-generated method stub
int num1 = s1.getName().length()-s2.getName().length();
int num2 = num1==0?s1.getName().compareTo(s2.getName()):num1;
int num3 = num2==0?s1.getAge()-s2.getAge():num2;
return num2;
}
});
ts2.add(new Student("张三aaaa",14));
ts2.add(new Student("李四aa",15));
ts2.add(new Student("张三",16));
ts2.add(new Student("赵老六",17));
ts2.add(new Student("钱七",18));
System.out.println(ts2);