day15~~ArrayList、LinkedList区别和Set接口、Map接口(和Collection是一个级别的)

一、ArrayList

1.概述

是List接口的实现类,拥有List接口的所有特点
有序 可重复 能存null 有下标
ArrayList本质是一个数组结构,底层维护了一个Object[] 查询效率高
数组的容量会自动调整

  1. 存在于java.util包中。
    
  2. 内部用数组存放数据,封装了数组的操作,每个对象都有下标。
    
  3. 内部数组默认初始容量是10。如果不够会以1.5倍容量增长。
    
  4. 查询快,增删数据效率会降低。
    

2,创建对象

ArrayList()
构造一个初始容量为 10 的空列表

3.测试(迭代list集合的4种方式)

1.第一种
Iterator it = list.iterator();
  while(it.hasNext()) {
   System.out.println(it.next());
  }
2.第二种
ListIterator it2 = list.listIterator();
  while(it2.hasNext()) {
   System.out.println(it2.next());
  }
3.第三种
for(int i = 0; i<list.size();i++) {
   System.out.println(list.get(i));
  }
4.第四种 增强for循环
for(Object o : list) {
   System.out.println(o);
  }

for( 1 2 :3 ){} 1是类型 2是变量 3是要遍历的集合
增强for循环(foreach)优势:
代码整洁
无需考虑边界问题,性能略微提升
预防Bug
增强for循环(foreach)使用场景
对遍历原始集合不做修改的情况

4.ListIterator和Iterator区别和使用

相同点
都是迭代器,当需要对集合中元素进行遍历不需要干涉其遍历过程时,这两种迭代器都可以使用。
不同点
1.使用范围不同,Iterator可以应用于所有的集合,Set、List和Map和这些集合的子类型。而ListIterator只能用于List及其子类型。
2.ListIterator有add方法,可以向List中添加对象,而Iterator不能。
3.ListIterator和Iterator都有hasNext()和next()方法,可以实现顺序向后遍历,但是ListIterator有hasPrevious()和previous()方法,可以实现逆向(顺序向前)遍历。Iterator不可以。
4.ListIterator可以定位当前索引的位置,nextIndex()和previousIndex()可以实现。Iterator没有此功能。

二、LinkedList

1.概述

是List接口的实现类,拥有List接口的所有特点
有序 有索引 可重复 可以存null
LinkedList底层维护了一个链表的结构
适合增删业务

2.创建对象

LinkedList() 构造一个空列表。

3.常用方法

void add(int index, E element) 在此列表中指定的位置插入指定的元素。
void addFirst(E e) 指定元素插入此列表的开头。
void addLast(E e) 将指定元素添加到此列表的结尾。
void clear() 从此列表中移除所有元素。
boolean contains(Object o) 如果此列表包含指定元素,则返回 true。
E element() 获取但不移除此列表的头(第一个元素)。
E peek() 获取但不移除此列表的头(第一个元素)。
E get(int index) 返回此列表中指定位置处的元素。
int indexOf(Object o) 返回此列表中首次出现的指定元素的索引
E set(int index, E element) 将此列表中指定位置的元素替换为指定的元素。
E remove(int index) 移除此列表中指定位置处的元素。

4.ArrayList和LinkedLIst的区别

ArrayList 通过的是数组形式来存贮管理对象的,LinkedList是通过链表的方式。
对于ArrayList,它在集合的末尾删除或添加元素所用的时间是一致的,但是在列表中间的部分添加或删除时所用时间就会大大增加。但是它在根据索引查找元素的时候速度很快。
对于LinkedList则相反,它在插入、删除集合中任何位置的元素所花费的时间都是一样的,但是它根据索引查询一个元素的时候却比较慢。

三、Set接口

1.概述

Set接口时Collection接口的子接口
一个不包含重复元素的 collection。
数据无序(因为set集合没有下标)。
由于集合中的元素不可以重复。常用于给数据去重。

2.特点

无序 不重复 只能存一个null 没索引

3.常用方法

全是继承的Collection的方法

四、HashSet

1.概述

实现了Set接口,底层是哈希表/散列表的结构

2.创建对象

HashSet() 构造一个新的空 set,其底层 HashMap 实例的默认初始容量是 16,加载因子是 0.75。

3.迭代set集合

			//方式1:Iterator<E> iterator()
		        Iterator<String> it = set.iterator();
		        while (it.hasNext()){
		            String s = it.next();
		            System.out.println(s);
		        }
		        //方式2: 增强for
		        for(String s : set){
		            System.out.println(s);
}

五、Map

1.概述

将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。
数据的格式是K V ,键值对儿.
K不能重复.一般 K和V是一对一的关系.
可以根据K获取V的值

2.常用方法

V put(K key, V value)
V get(Object key)
void clear()
boolean containsKey(Object key)
boolean equals(Object o)
int hashCode()
boolean isEmpty()
V remove(Object key)
int size()
Collection values()
Set keySet()
Set<Map.Entry<K,V>> entrySet()

3.测试三种迭代

1.第一种遍历Map
Map map = new HashMap<Integer,String>();
  map.put(9527, "灭霸");
  map.put(9528, "美队");
  map.put(9529, "寡妇");
  map.put(9520, "浩克");
  System.out.println(map.get(9527));//通过键获取值
  System.out.println(map);
  Set set = map.keySet();//通过Map接口中的keySet()方法来把键存入Set集合中
  Iterator it = set.iterator();
  while(it.hasNext()) {
   System.out.println(map.get(it.next()));
  }
2.第二种遍历Map
Collection values = map.values();	//把map里的value们存入Collection
  Iterator i = values.iterator();//遍历Collection获取每个value
  while(i.hasNext()) {
  System.out.println(i.next());
  }
3.第三种遍历
2 = map.entrySet();		//通过entrySet()把map里的key和value一起存入set
  Iterator it2 = s2.iterator() ;
  while(it2.hasNext()) {
   Entry<Integer, String> enter = (Entry<Integer, String>) it2.next();//迭代set获取每个Entry
   System.out.println(enter.getKey());		//通过Enter的方法来调用键和值
   System.out.println(enter.getValue());
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值