文章目录
引入
-
集合是用来装东西的,就好像一个容器.
-
数组是一个容器
-
数组的缺点:长度不能改变,只能存储同一种数据
-
java为什么要提供许多集合类来存储数据
-
1.因为要求集合类的长度是可变的
-
2.不同的数据存储,操作方式不同
-
3.底层有数组,链表,Hash表,树来实现
-
ArrayList底层数组实现
List元素可重复 LinkedList底层链表实现
Vocter底层数组实现线程安全
单列集合 Collection
Set元素不可重复 HashSet底层hash表实现
集合 TreeSet底层红黑树实现
HashMap
双列集合 Map TreeMap
HashTable
一、Java集合
- Collection接口:单列集合,存储一个一个的对象
- List接口:有序的、可重复的数据(可理解为动态数组)
- ArrayList、LinkedHashSet、Vector
- Set接口:无序的、不可重复的数据(可理解为高中数学中的集合)
- HashSet、LinkedHashSet、TreeSet
- Map接口:双列集合,存储一对(key—value)一对的数据(可理解为函数)
- HashMap、LinkedHashMap、TreeMap、HashTable、Properties
二、Collection接口方法
- 查看 Collection 接口可知有 15 个抽象方法,供实现类实现,下面详解其中 13 个
- collection接口中定义的方法,是所有集合中都会用到的方法
集合中默认存储任意数据类型,建议使用泛型,存储同一种类型
1 boolean add(E e) 向集合中添加元素,只能添加引用类型,不能添加基本类型
2 boolean addAll(Collection c) 将形参集合的元素添加到当前集合
3 void clear() 删除当前集合所有元素
4 boolean comtains(Object obj) 会调用obj对象所在类的equals方法,判断形参传入集合中的值是否在当前集合内
5 boolean contains(Collection coll) 判断形参coll的元素是否都在当前集合内
6 boolean equals(Object o) 判断当前集合和形参集合元素是否相等
7 int hashCode() 返回当前集合的hashCode值
8 boolean isEmpty() 判断当前集合是否为空
9 boolean remove(Object obj) 从当前集合删除obj元素
10 boolean removeAll(Collection coll) 从当前集合删除coll集合的所有元素
11 boolean retainAll(Collection coll) 求两个集合的交集,并返回给当前集合
12 int size() 返回当前集合的长度
13 Object[] toArray() 将当前集合转换为数组
演示代码如下
Collection<String> c = new ArrayList();
c.add("abc");
c.add("ab");
c.add("c");//单个增加
//c.clear();//清空所有元素
/*System.out.println(c.remove("a"));//删除指定元素,有则返回true,没有则返回false
System.out.println(c.contains("a"));//集合是否包含指定元素,包含返回true,没有则返回false
System.out.println(c.isEmpty());//判断集合是否为空*/
/* c.removeIf(new Predicate<String>() {//有条件的删除
@Override
public boolean test(String s) {
return s.startsWith("a");//删除过滤的条件
//删除首字母为a的所有元素
}
});*/
/*
Predicate是一个接口,假定在这里重写可以以少建一个类
*/
c.stream().forEach((a)->System.out.println(a));//以流的方式遍历
//System.out.println(c);
/*ArrayList<String> list = new ArrayList<>();
list.add("X");
Collections.addAll(list,"a","b","B");//添加元素
System.out.println(list);
Collections.sort(list);//排序
System.out.println(list);
System.
out.println(Collections.binarySearch(list,"B"));//查找*/
ArrayList<String> list1 = new ArrayList<>();
list1.add("X");
Collections.addAll(list1, "a", "b", "C");
ArrayList<String> list2 = new ArrayList<>();
list2.add("x");
list2.add("y");
list2.add("z");
Collections.copy(list1, list2);//替换,且list1的size必须大于list2
System.out.println(list1);
//Collections.fill(list1,"x");//指定元素替代指定列表中的所有元素
System.out.println(Collections.max(list1));//比较并指定列表中最大值元素
//Collections.replaceAll(list1,"y","B");//将所有y换成B
Collections.reverse(list1);//反转
System<