这是集合框架体系
List集合存储元素的特点:有序,可重复
List接口的实现类:ArrayList、linkedList
ArrayList实现了长度可变的数组,在内存中分配连续的空间,遍历元素和随机访问元素的效率比较高 - 查询比较快
linkedList采用链表存储方式,插入、删除元素时效率比较高
1.ArrayList增加:
boolean add( Object element ) 把当前的element元素添加集合的尾部,成功返回true, 失败返回false;
void add(int index, E element) 在集合中指定位置上添加元素
注意:使用add方法添加元素的时候,一定要保证指定的位置前面有元素。否则会发生下标越界异常。
public static void main(String[] args) {
List list=new ArrayList();
list.add("kk");
list.add(12);
list.add(false);
list.add(new Student("老王"));
System.out.println(list);
[kk, 12, false, Student{name='老王'}]
删除:
remove(Object obj) 删除集合中指定的元素
Object remove(int index) 删除集合中指定位置上的元素,并返回被删除的元素 。删除时指定的下标的位置一定要保证有元素。
clear() 清空集合中所有元素,会让集合中的size变成0。
注意:使用List调用remove如果指定的是值,这时这个值一定是下标(默认),因此如果要删除集合中存放的包装类型的数据, 这时需要把这个int值包装成对应的Integer类型,Integer.valueOf(int)
List list=new ArrayList();
list.add("kk");
list.add(12);
list.add(new Student("老王"));
list.remove(Integer.valueOf(12));//用包装类去删除
list.remove(0);//下标去删除
System.out.println(list);
[Student{name='老王'}]
修改:
Object set(int index, E element) 修改集合中指定位置上的数据。 原来的元素就被删除掉了。返回被替换的那个元素。
查询:
get(int index) 返回此列表中指定位置上的元素
其他一些方法:
size() 求一个集合的长度
isEmpty(), 判断这个集合是不是空的,如果为空集合返回true,否则为false
boolean contains(Object o) ,判断列表中是否存在指定元素
2.用Iterator去遍历集合
List list=new ArrayList();
list.add("kk");
list.add(12);
list.add(new Student("老王"));
Iterator iterator=list.iterator();
while (iterator.hasNext()){
System.out.println( iterator.next());
}
结果:
kk
12
Student{name='老王'}
3.linkedList
| 方法名 | 说明 |
| void addFirst(Object o) | 在列表的首部添加元素 |
| void addLast(Object o) | 在列表的末尾添加元素 |
| Object getFirst() | 返回列表中的第一个元素 |
| Object getLast() | 返回列表中的最后一个元素 |
| Object removeFirst() | 删除并返回列表中的第一个元素 |
| Object removeLast() | 删除并返回列表中的最后一个元素 |
4.ArrayList 和 linkedList 比较
二者都是List接口的实现类,存储的元素都是有序可重复的。
ArrayList底层维护的是可变数组来存放元素,查询快,增删慢。
linkedList底层采用的是链表结构,增删快,查询慢。
5.HashSet和:Hashmap
当给hashset中存放元素的时候会先调用对象的hashCode方法,计算哈希值,根据哈希值来决定当前对象在集合中的存储位置。
在存储的时候,如果遇到了哈希值相同的元素,这时集合的底层还会去调用当前对象的equals方法,判断当前正要存放的对象和
位置上已经存在的对象是否是同一个对象,equals方法返回的true,就认为相同对象,不保存,如果equals方法返回的false,当前对象已经会被保存。
Set set=new HashSet();
set.add("hello");
set.add(50);
set.add(false);
System.out.println(set);
[50, false, hello]
如果存的值相同会自动覆盖也就是哈希值相同
Set set=new HashSet();
set.add("hello");
set.add(50);
set.add(50);
System.out.println(set);
[50, hello]
这就是他的哈希值:
Set set=new HashSet();
set.add("hello");
set.add(50);
set.add(120);
Iterator iterator=set.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next().hashCode());
}
50 120 991623222.Hashmap
判断:
containsKey(Object key) 判断Map是否包含指定的key,有就返回true
containsValue(Object value) 判断Map是否包含指定的value,有就返回true
isEmpty() 判断Map集合是否为null,它的size 是零
keySet(),获取map中所有的key组成一个set集合。
entrySet() ,获取map中所有的键值对组成一个set集合。
增加:
put(K key, V value) :把当前的key和value存放到集合中。
注意如果当前的key在集合中已经存在,那么就会用当前的value覆盖
key对应的以前的value值,并且返回被覆盖的那个value值
Map map=new HashMap();
map.put("hello","ll");//"hello"就是代表key后面的"ll"就是value
map.put("work","oo");
map.put("uu","ll");
System.out.println(map);
{uu=ll, work=oo, hello=ll}
key 不能相同不然你添加的value值就会覆盖前面那个key的value值;
Map map=new HashMap();
map.put("hello","ll");
map.put("work","oo");
map.put("uu","ll");
map.put("uu","520");
System.out.println(map);
结果是:{uu=520, work=oo, hello=ll}
删除:
clear();清空
remove(Object key) 根据指定的key删除key和value
修改:
可以利用新增方法中key唯一实现对元素的修改
获取:
get(Object key) 根据指定key获取Map集合中key对应的value值,如果key不存在,返回null
size() 获取key-value对应关系的个数



