1. 数组和集合的区别
* 区别1 :
* 数组既可以存储基本数据类型,又可以存储引用数据类型,基本数据类型存储的是值,引用数据类型存储的是地址值
* 集合只能存储引用数据类型(对象),集合中也可以存储基本数据类型,但是在存储的时候会自动装箱变成包装类对象
* 区别2:
* 数组长度是固定的,不能自动增长
* 集合的长度的是可变的,可以根据元素的增加而增长
2. 数组和集合什么时候用?
* 1,如果元素个数是固定的推荐用数组
* 2,如果元素个数不是固定的推荐用集合
一: Collection
1. List(存取有序,有索引,可以重复)
1) ArrayList
底层是数组实现的,线程不安全,查找和修改快,增和删比较慢
2) LinkedList
底层是链表实现的,线程不安全,增和删比较快,查找和修改比较慢
2. Set(存取无序,无索引,不可以重复)
1) HashSet
底层是哈希算法实现
LinkedHashSet( HashSet的子类 )
底层是链表实现,但是也是可以保证元素唯一,和HashSet原理一样
2) TreeSet
底层是二叉树算法实现
一般在开发的时候不需要对存储的元素排序,所以在开发的时候大多用HashSet,HashSet的效率比较高
List
ArrayList集合
常用方法:
public boolean add(E element):添加元素
public E get(int index):获取元素
public int size():获取长度
LinkList集合
* LinkedList类特有方法:
*public void add(int index, E element):在指定位置插入指定元素
*public void addFirst(E element):将指定元素插入到列表开头
*public E getFirst():获取并返回第一个元素
*public E removeFirst():删除并返回第一个元素。
3种遍历: for iterator foreach
Set
Set接口中的元素无序(存的顺序和取的顺序不一致),保证元素不会重复。
HashSet集合
1.它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null 元素。
2. HashSet保证不重复:
将自定义类的对象存入HashSet去重复,类中必须重写hashCode()和equals()方法,可以使用source自动生成。
LinkedHashSet集合
底层是链表实现的,是set集合中唯一一个能保证怎么存就怎么取的集合对象。
因为是HashSet的子类,所以也是保证元素唯一的,与HashSet的原理一样。
二:Map接口
Map接口和Collection接口的不同:
1)Map是双列的,Collection是单列的
2)Map的键唯一,Collection的子体系Set是唯一的
3)Map集合的数据结构值针对键有效,跟值无关;Collection集合的数据结构是针对元素有效。
Map集合的功能概述
* a:添加功能
* put(K key,V value):添加元素。(返回值类型和value类型保持一致)
* 如果键是第一次存储,就直接存储元素,返回null
* 如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值
* b:删除功能
* voidclear():移除所有的键值对元素
* remove(Object key):根据键删除键值对元素,并把值返回
* c:判断功能
* boolean containsKey(Object key):判断集合是否包含指定的键
* boolean containsValue(Object value):判断集合是否包含指定的值
* boolean isEmpty():判断集合是否为空
* d:获取功能
* Collection<V> values():获取集合中所有值的集合
* V get(Object key):根据键获取值
* Set<K> keySet():获取集合中所有键的集合
* Set<Map.Entry<K,V>>entrySet():
* e:长度功能
* int size():返回集合中的键值对的个数
Map
1)HashMap
底层是哈希算法,针对键
LinkedHashMap
底层是链表,针对键
2)TreeMap
底层是二叉树算法,针对键
开发中用HashMap比较多