java基础系列——集合类

前言: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:
在这里插入图片描述