回忆数组–数组有固定的长度
int[] arry=new int[10];
针对数据长度可变的情况—》集合
java集合 应对动态增长数据(在编译的时候无法知道具体的数据量)
集合类–>可变容器类
都是容器
(1)数组是固定长度,集合的长度是可变的
(2)数组放的数据都是基本类型数据(四类8种),但是集合放的数据都是引用数据类型
(String、自定义的对象、Integer–int、Long)
(3)集合中对于基本数据会转换为引用数据类型再存储
(1)Collection–接口 Interface
Interface Collection<E>---add 方法
public abstract class AbstractCollection<E> extends Object implements Collection<E>
public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E>
a、List(接口)集合—特定顺序的元素
public interface List<E> extends Collection<E>
add(int index, E element) —指定索引处增加元素的位置
iterator() 以正确的顺序返回该列表中的元素的迭代器
b、Set(接口)集合–不能够有重复的元素
(2)Map–类似于数据库
主要存储”键值对” key-value MapReduce
(3)Iterable 集合的访问迭代 返回此集合中的元素的迭代器
没有关于元素返回顺序的保证(除非这个集合是提供保证的某个类的实例)
Collection接口 Map
Collection 、Map 、List 、Set 等都是 Interface
AbstractCollection、 Abstractlist等 抽象类 实现了 Interface的部分方法
ArrayList 、LinkedList等 具体实现类 实现了 所有方法
List集合是一个有序(索引有序)、可重复的集合,集合中每个元素都有对应的顺序索引
List允许加入重复元素是因为可以通过索引来访问指定位置的元素
List集合默认按照元素的添加顺序增加元素的索引
(1)ArrayList简介
ArrayList 是基于数组实现的List类。实现所有可选列表操作,并允许所有元素,包括null
(2)初始化 ArrayList
ArrayList<E> arrayList=new ArrayList<E>();---初始数据类型为E,容量大小为10的List
(3)主要方法
boolean add(E e) 将指定的元素追加到此列表的末尾
void add(int index, E element) 在此列表中的指定位置插入指定的元素
boolean addAll(Collection<? extends E> c) 按指定集合的Iterator返回的顺序将指定集合中的所有元素追加到此列表的末尾
boolean addAll(int index, Collection<? extends E> c) 将指定集合中的所有元素插入到此列表中,从指定的位置开始
boolean contains(Object o) 如果此列表包含指定的元素,则返回 true
E get(int index) 返回此列表中指定位置的元素
E remove(int index) 删除该列表中指定位置的元素
E set(int index, E element) 用指定的元素替换此列表中指定位置的元素
Object[] toArray() 以正确的顺序(从第一个到最后一个元素)返回一个包含此列表中所有元素的数组
(4)List集合遍历的四种方法
a、通过 List.size
b、通过Iterator
boolean hasNext() 如果迭代具有更多元素,则返回 true
E next() 返回迭代中的下一个元素
LinkedList 指的是链表类数据结构
与ArrayList的不同
(1)链表中的元素可以任意的增加和删除,效率很高,但是 查询效率不如ArrayList(有索引)
a->b->c….
(2)将对象存放在独立的空间中,而且每个空间保存了下一个连接的索引
(3)初始化
LinkedList linkedlist=new LinkedList();
(4)主要的方法
void addFirst(E e) 在该列表开头插入指定的元素
void addLast(E e) 将指定的元素追加到此列表的末尾
E peekFirst() 检索但不删除此列表的第一个元素,如果此列表为空,则返回 null
peekLast() 检索但不删除此列表的最后一个元素,如果此列表为空,则返回 null
pop() 从此列表表示的堆栈中弹出一个元素
set集合存放无序不可重复的元素
list集合 存放有序可重复的元素。—索引
set集合不按照特定方式进行排序,只是放元素放在集合
set主要是由 HashSet和TreeSet具体实现类实现
Hash(哈希算法)—-哈希函数定义的好坏
HashCode—哈希值
(1)equals()方法判断两个元素的HashCode值是否相同
(2)如果Hashcode值相同,继续与集合的元素作比较,
如果还相同则视为同一个对象,不保存在HashSet中
如果对象不相同,理论上要存储(比价麻烦)–避免发生
(3)如果HashCode值不相同,直接把元素存放在该元素的Hashcode位置
public class HashSet extends AbstractSet implements Set, Cloneable, Serializable
(4)构造函数
HashSet hashSet=new HashSet();
boolean add(E e) 将指定的元素添加到此集合(如果尚未存在)
boolean contains(Object o) 如果此集合包含指定的元素,则返回 true
TreeSet 是一个有序集合,默认将元素按照升序排列,Comparable接口
equals方法 判断元素是否重复
比较器 比较一下大小顺序
Set 与list 都属于 Collection
Map每个元素的值都包含两个对象:key-value 键值对
key不能够重复;唯一的key 可以对应多个value
map中不存在索引,有key
循环访问的方式
Hash算法
public class HashMap<K,V>extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable
允许null的值和null键
(1)初始化
HashMap<key,value> hashMap=new HashMap<key,value> ();
(2)主要的方法
put(K key, V value) 将指定的值与此映射中的指定键相关联
get(Object key) 返回到指定键所映射的值,或 null如果此映射包含该键的映射
Set keySet() 返回此地图中包含的键的Set视图
boolean containsKey(Object key) 如果此映射包含指定键的映射,则返回 true
boolean containsValue(Object value) 如果此地图将一个或多个键映射到指定值,则返回 true
不接受 Null
为了成功的在hashtable中存储和获取对象,用作键的对象必须实现 hashcode和equals方法
集合动态可扩展
Set代表无序集合不重复,(TreeSet 有序)
List集合有序可重复
Map 集合存储键值对- key value
自定义对象 要重写 方法(HashCode Comparator equals等)
原文:https://www.cnblogs.com/hsiehchou/p/10403378.html