前言:java基础的细节比较多,脑子不够用,经常忘记一些知识点,所以花费了几天时间,做了一些笔记。
集合类与数组的不同之处是数组的长度是固定的,集合的长度是可变的,这也是集合的特点之一。
常用的集合类的继承关系如下图
Collection接口提供了一些集合类常用的方法
方法 | 功能描述 |
---|---|
add(E e) | 将指定的对象添加到集合中 |
remove(Object o) | 将指定的对象从该集合中移除 |
isEmpty() | 判断当前集合是否为空 |
iterator() | 返回一个在此集合上的一个迭代器,用于遍历集合 |
size() | 获取该集合中元素的个数 |
所以继承自Collection接口的所有子接口或子类都会继承这些操作方法。
List集合
list接口除了继承Collection接口中的方法,还定义了两个方法
方法 | 功能描述 |
---|---|
get(int index) | 获取指定索引位置的元素 |
set(int index,Object obj) | 将集合中指定索引位置的元素修改为指定对象 |
List接口有两个实现类,ArrayList类和LinkedList类。
ArrayList类似于可变数组,优点是可进行快速的随机访问,缺点是向集合中插入删除元素速度比较慢。
LinkedList类似于链表,优点是便于向集合中插入删除元素,缺点是随机访问效率低。
所以根据具体情况选择使用何种类型的集合。
ArrayList和LinkedList集合比较简单,这里就不再举例子了。
Set集合
相比于List集合,Set集合中不能有重复元素,Set接口有两个实现类,HashSet类和TreeSet类。
HashSet类由哈希表支持,不保证Set的迭代顺序。
TreeSet类实现了java.util.SortedSet接口,所以集合在遍历时按照自然顺序递增排序,也可以自己指定比较器。
Map集合
Map集合没有直接继承自Collection接口,而是直接继承Object类,其提供key到value的映射。Map中不能包含重复的key且每个key只能映射一个value。其存储类似于数据结构中散列技术。
Map集合中的常用方法
方法 | 功能描述 |
---|---|
put(K key,V value) | 向集合中添加指定的key和value映射关系 |
containsKey(Object key) | 查看集合中是否包含key的映射关系 |
containsValues(Object value) | 查看集合中是否包含value指定值 |
get(Object key) | 返回key指向的值,没有则返回null |
keySet() | 返回该集合中所有对象形成的Set集合 |
values() | 返回该集合中所有值对象形成的Collection集合 |
Map接口有两个实现类,HashMap类和TreeMap类。
HashMap类是基于哈希表的Map接口的实现,其添加和删除映射关系效率高,必须保证键的唯一性且允许为null。
TreeMap集合中的映射关系具有一定的顺序,添加和删除映射关系时相比HashMap类性能稍差,不允许键为null
eg:
package com.jack.collection;
import java.util.*;
class Student{
private String name;
private String id;
public Student(String id,String name){
this.id = id;
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
public class MapTest {
/**
* author:jack zhang
* @param args
*/
public static void main(String[] args) {
//Test1:HashMap
System.out.println("Test1:HashMap");
Map<String,String> map = new HashMap<String,String>();
Student stu1 = new Student("01","张三");
Student stu2 = new Student("03","张四");
Student stu3 = new Student("02","张五");
map.put(stu1.getId(), stu1.getName());
map.put(stu2.getId(), stu2.getName());
map.put(stu3.getId(), stu3.getName());
Set<String> set = map.keySet();
Iterator<String> it = set.iterator();
while(it.hasNext()){
String id = it.next();
String name = map.get(id);
System.out.println(id+":"+name);
}
//Test2:TreeMap
System.out.println("Test2:TreeMap");
TreeMap<String,String> treemap = new TreeMap<String,String>();
treemap.putAll(map);
Set<String> sett = treemap.keySet();
Iterator<String> itt = sett.iterator();
while(itt.hasNext()){
String id = itt.next();
String name = treemap.get(id);
System.out.println(id+":"+name);
}
}
}
result: