集合
- ArrayList
- HashSet
- HashMap
- 泛型
集合:同一类事物放在一起组成了集合。(引用数据类型,这是和数组最大的区别)
集合:Collection(接口) 父类是Iterable(接口:功能是集合的迭代遍历) 集合的分类: 1 List(接口):有序可以重复:常见的实现类:Arraylist(数组实现)LinkedList(链表实现) 2 set(接口): 无序不重复 常见的实现类: HashSet(哈希表实现) TreeSet(二叉树实现)
ArrayList
ArrayList:
实现了List接口(List继承了Collection接口)
补充:一个类实现了一个接口,那么我们就要重写这个接口里的(抽象)方法,也就是说,接口里的方法是大家都有的。
集合里面的方法:主要是增删改查。
ArrayList:
1,底层是数组(Object)
2,ArrayList 元素个数 size() 方法
3增(添加):add(元素): 数组的长度和size不是一回事,如果size()小于数组长度,直接将元素放入到数组里面。如果size()等于数组长度,会自动扩容。
4,删(删除):
remove(元素):删除第一个出现的元素
remove(索引):删除指定索引位置的元素
5,改(修改):set(索引,元素)
6,查(查询):get(索引)
new IllegalArgumentException("Illegal Capacity: "+initialCapacity); 非法参数异常
ArrayList和LinkedList的区别:
1、底层数据结构不一样 数组 链表
2、ArrayList查询快,增删慢
3、LinkedList查询慢,增删快
ArrayList集合是我们日常经常使用的主要集合之一
例子
`public static void main(String[] args) {
ArrayList<String> objects=new ArrayList<>();
objects.add("张三");
objects.add("李四");
objects.add("王五");
System.out.println(objects);
objects.remove(1);
objects.set(1, "赵六");
objects.get(1);
for (String a:objects){
System.out.println(a);
}
}`
HashSet

hashSet:无序(没有索引) 不重复(可以去重)
for和foreach的区别: 1,for可以操作索引,但是语法结构相对复杂 2,foreach 不可以操作索引,但是语法结构相对简单 HashSet和HashTable的区别: 1,HashSet是线程不安全的,效率高,允许null值 2HashTable是线程安全,效率低,不允许null值
HashSet<Integer> set=new HashSet<>();
set.add(1);
set.add(1);
set.add(2);
set.add(3);
System.out.println(set);
set.remove(2);
System.out.println(set);
set.clear();
System.out.println(set);
for (Integer i : set) {
System.out.println(i);
}
Iterator<Integer> iterator = set.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
ArrayList<String> names = new ArrayList<>();
names.add("张三");
names.add("李四");
names.add("张三");
names.add("王五");
names.add("赵六");
HashSet<String> set1 = new HashSet<>(names);
names = new ArrayList<>(set1);
System.out.println(names);
HashMap

HashMap:双列集合
new HashMap<k,v> k键 v值 键值对
键是唯一的,值可以重复
jdk8 HashMap底层是:数组+链表+黑红树 1,HashMap负载因子: 0.75 元素个数超过数组长度的0.75倍,数组就会扩容2倍 2,链表的长度超过8,链表就会转换成红黑树。如果红黑树的长度小于6红黑树就会转换成链表。 3,HashMap的初始容量:16
HashMap<Object, Object> map=new HashMap<>();
map.put("张三",18);
map.put("李四",20);
map.put("张三",22);
Object age =map.get("张三");
System.out.println(age);
map.remove("李四");
Set<Object> keySet=map.keySet();
for (Object key:keySet
) {
System.out.println(key+"---"+map.get(key));
}
泛型
ArrayList <>放的是泛型,指的是集合里面放入的数据类型
泛型的好处:
省去了从集合中取出数据时的强制类型转换。
加了泛型,就会要求我们放入数据的时候,只能放入该数据类的数据,那么取出来的时候也是这种数据类型。
<>放我们指定的数据类型
Object:是所有类的父类