一:List集合
List集合特点:
元素有序的,且可重复。(元素有序不是指,我们存进Lits集合中的什么1,3,7,6他给我们从小到大,
或者从大到小这样子,所谓的有序是我们该集合有下标,下标从0开始,
然后我们按照什么顺序增加到list集合的,那么他就是什么样子的顺序)。
List集合遍历:
根据下标,foreach,迭代器遍历数据。
ArrayList集合是继承List的集合的,所以Lits集合具备的一些特点,ArrayList也是具备的。
ArrayList集合的特点:
简单数据结构,超出容量会自动扩容,也是和List集合的扩容是一样的。
ArrayList集合动态数组,为什么说是动态数组,因为数组一般能存放多少数据,一般都是定好的,而ArrayList数组是可以根据数据扩容的,所以是一个动态的数组。
内部实现是基于基础的对象数组的,也就是ArrayList集合存放的是对象。
ArrayList集合不适合随机的删除和增加。
使用迭代器进行删除集合中的数据,首先不会存在数据想要删除的数据,没有被删除,或者多删,
报错这种情况不会出现,使用迭代器不报错的原因,是因为迭代器可以维持那两个数的相等,所以不会像foreach出现那种情况。
@Test
public void test05() {
Iterator<Integer> it=list.iterator();
while(it.hasNext()) {
Integer vaule=it.next();
if(vaule==3) {
it.remove();
}
}
}
得到的结果:[1, 2, 4, 5, 6]
二:Set集合
1.set
集合元素有序不重复,创建set集合 Set set = new HashSet();
循环遍历方法(3种):跟collection相同, 但不能使用ListIterator对象(不是List或它的实现 类),也不能用for循环遍历,没有下标和get方法
2.HashSet
去重的原理 : 根据元素的hashCode确定在集合中的位置,如果位置上不存在元素,则直接存入;
如果位置上存在数据,则调用equals方法进行比较。如果返回值是true, 则不存入新 的元素;如果返回值是false, 则存入新的元素
无序不重复:按照数据的hashCode的值进行存储上的排序,和存入的顺序无关
HashSet特点:
1.它存储唯一元素并允许空值,依据对象的hashcode来确定该元素是否存在
2. 由HashMap支持
3. 不保持插入顺序
4. 非线程安全
5. 性能参数:初始容量,负载因子,默认值: 初始容量16,负载因子0.75,示例:new HashSet<>(20, 0.5f);
三:Map
1.map集合是什么?
Map集合和Collection集合没有任何关系。Collection集合是以单个方式存储元素的,而Map集合是以键值对的方式存储元素,所有Map集合的Key是无序不可重复的,key和value都是引用数据类型,存的都是内存的地址。
Map集合的实现类主要为HashMap、HashTable。子接口有一个SortedMap,SortedMap有一个TreeMap实现类。
2.Map集合常用实现类
HashMap
HashMap底层采用哈希表的数据结构,非线程安全的
二、Map接口常用方法
1.clear
方法全称为:void clear(),移除map里所有的映射关系,使用方法如下:
public static void main(String[] args) {
Map map=new HashMap();
map.put(1,"张三");
map.put(2,"李四");
map.put(3,"王麻子");
map.clear();
}
2.containsKey
方法全称为:boolean containsKey(Object key),containsKey底层调用了equals方法,查询key中是否包含某个元素,使用方法如下:
public static void main(String[] args) {
Map map=new HashMap();
map.put(1,"张三");
map.put(2,"李四");
map.put(3,"王麻子");
boolean res = map.containsKey(3);
System.out.println(res);
}
3.get
方法全称为:Object get(Object key),查询key对应的value值,返回value值,使用方法如下:
public static void main(String[] args) {
Map map=new HashMap();
map.put(1,"张三");
map.put(2,"李四");
map.put(3,"王麻子");
Object o = map.get(3);
System.out.println(o);
}
4.keySet
方法全称为:Set keySet(),用来获取map集合中所有的key,并将所有的key中存入set集合中,使用方法如下:
public static void main(String[] args) {
Map map=new HashMap();
map.put(1,"张三");
map.put(2,"李四");
map.put(3,"王麻子");
Set set = map.keySet();
for (Object o : set) {
System.out.println(o);
}
}
5.put
方法全称为:put(Object key,Object value),给map集合中添加键值对,使用方法如下:
public static void main(String[] args) {
Map map=new HashMap();
map.put(1,"张三");
map.put(2,"李四");
map.put(3,"王麻子");
}
6.remove
方法全称为:remove(),利用key删除map集合中的元素,使用方法如下:
public static void main(String[] args) {
Map map=new HashMap();
map.put(1,"张三");
map.put(2,"李四");
map.put(3,"王麻子");
map.remove(3);
}
7.size
方法全称为:int size(),获取map集合中键值对的个数,使用方法如下:
public static void main(String[] args) {
Map map=new HashMap();
map.put(1,"张三");
map.put(2,"李四");
map.put(3,"王麻子");
int i = map.size();
System.out.println(i);
}
8.values
方法全称为:Collection values(),获取map集合中所有的value值,并将value值存入Collection集合中返回,使用方法如下:
public static void main(String[] args) {
Map map=new HashMap();
map.put(1,"张三");
map.put(2,"李四");
map.put(3,"王麻子");
Collection values = map.values();
//Collection遍历也可用迭代和获取下标的方法
for (Object value : values) {
System.out.println(value);
}
}
9.map集合的遍历
第一种方式:
map集合不能迭代,也不能使用foreach,所有只能先获取去所有的key,遍历key然后通过key获取每一个key和value
第二种方式:
把map集合全部转换成set集合,set集合中元素的类型是Map.Entry,取出Map.entry对象之后,可以获取到key和value