前言:
博主目前还没系统学习数据结构,因此本篇着重于集合的基本使用,并不会追根溯源。学习对象为Map、List接口和ArrayList、HashMap类。学习目的以使用为主,不会赘述过多原理。
什么是容器?
Java中的容器主要有Collection和Map,它们都是顶层接口,都位于java.util包下,实际使用的容器都是基于这两个接口延伸出来的。
Map接口:
Map是从键到值的映射, 键不允许重复,每个键最多能映射一个值,值可以重复
键值映射就相当于一个人,有名字,有性别,有年龄,他的名字、性别、年龄都是唯一且确定的。
List接口:
- 存储有序的、可重复的数据。相当于一个动态数组。
- 每个元素都有对应的整型的顺序索引。可根据序号存取容器中的元素。
List接口继承的是Collection接口,所以继承了Collection接口中的所有方法:
Collection接口常用方法
public boolean add(E e); //添加元素到集合
public boolean addAll(Collection<? extends E> c); //存放一个集合
public boolean contains(Object o); //查找集合中的元素
public boolean isEmpty(); //判断一个集合是否为空
public boolean remove(Object 0);//删除一个集合中的元素
public int size();//返回集合的长度
List接口中又拓展的方法
public E get(int index); //根据索引取得元素
public E set(int index,E element);//替换元素,index为要替换元素下标,element为要替换元素
public ListIterator<E> listIterator() List //List自己的迭代器
HashMap类:
在java 2集合框架中的Map接口有两个通用实现:HashMap和TreeMap。HashMap是采用哈希表实现,是Map接口的最好的全面实现。TreeMap不多阐述。
- 键不可以重复,值可以重复
- 底层使用哈希表实现
- 线程不安全
- 允许key为null,但只允许有一条记录为null,value也可以为null,允许多条记录为null
public class ArrayListTest {
public static void main(String[] args) {
HashMap hashmap = new HashMap<String,Object>();
hashmap.put("sa", "sas");
System.out.println(hashmap.get("sa"));//sas
}
}
ArrayList类:
底层数据结构是数组(相当于动态数组),允许对元素进行快速随机访问,但是向List中间插入与移除元素的速度很慢。线程不安全。
- ArrayList 实现了RandmoAccess接口,即提供了随机访问功能
- 在ArrayList中,我们即可以通过元素的序号快速获取元素对象
- ArrayList 实现了Cloneable接口,即覆盖了函数clone(),能被克隆
- ArrayList 实现java.io.Serializable接口,这意味着ArrayList支持序列化,能通过序列化去传输
- 如果通过不含参数的构造函数ArrayList()来创建ArrayList,则elementData的容量默认是10。
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add(0, "你好");
System.out.println(list.get(0));
}
综述
总之,HashMap就是键值对HashMap hashmap = new HashMap<String,Object>();
ArrayList就是按索引存取ArrayList<String> list = new ArrayList<String>();
在这里就没有叙述什么ArrayList的elementData对象等问题。