【Java高级特性】java学习之旅21-List集合

ArrayList

特征:
  1. 底层实现是数组,数据结构是线性表(连续的元素、连续的存储空间、有首有尾)
  2. jdk1.8之前初始容量是10,jdk1.8之后初始容量是0(在存入第一个元素的时候,容量为10)
  3. 扩容为原容量的1.5倍(参考方法grow)
  4. 有序的、不唯一、可为null、有索引(会越界)
  5. 查找较快、插入删除较慢
  6. 线程不同步、多线程使用不安全
    • 如果要同步:List list = Collections.synchronizedList(new ArrayList(…));
常用方法:
/**
 * 1.构造方法
 * ArrayList()
 * ArrayList(int initialCapacity)(初始化给出容量)//没有经过扩容
 *
 * 2.添加元素
 * add(E e)
 * add(int index, E element) (索引值,要添加的元素):如果索引值已存在会默认把原有的元素全部后移。
 *
 * 3.获取元素
 * get(int index) (元素的索引值):通过索引值去获得值
 *
 * 4.移除元素:
 * remove(int index)(元素的索引值):移除固定索引的元素,返回元素内容
 * remove(Object o)(元素的内容):移除相同内容的元素,返回布尔值
 * removeRange(int fromIndex, int toIndex):(开始索引,结束索引):包头不包尾,删除区间内的所有元素
 *
 * 5.获取元素个数:
 * size() :
 * 
 * 6.清空容器:
 * clear() 
 *
 * 7.判断容器是否为空
 * isEmpty() 
 *
 * 8.判断是否包含某个元素:
 * contains(Object o) (元素的内容)
 *
 * 9.查找指定元素的索引:
 * indexOf(Object o) (元素的内容)
 *
 * 10.截取容器并返回新容器对象:
 * subList(int fromIndex, int toIndex) (开始索引,结束索引)
 *
 * 11.返回包含所有元素的数组
 * toArray() //返回的是Object类的对象
 * toArray(T[] a) //可以返回固定类型的数数组
 *
 * 12.设置元素
 * set(int index, E element) (要替换的索引,内容):设置内容,返回原内容
 *
 *
 */
集合的遍历:
ArrayList<String> list1 = new ArrayList<>();
  1. fori
		for (int i = 0; i < list1.size(); i++) {
			System.out.println(list1.get(i));
		}
  1. foreach
		for (String name : list1) {
			System.out.println(name);
		}

3.iterator()获取Iterator对象,然后遍历

		Iterator<String> it = list1.iterator();
		while (it.hasNext()) {
			System.out.println(it.next());
		}

4.forEach()方法

		list1.forEach(x -> {
			x = "name:" + x;
			System.out.println(x);
		});

5.stream()方法

list1.stream().filter(x -> !x.equals("任玉文")).count();

注意:list集合中只能存放引用数据类型,这里值得注意的是int类型的包装类

// list集合中只能存放引用数据类型
		List<Integer> list = new ArrayList<>();
		
		// list.add("hello");
		list.add(123); // int -> Integer
		list.add(666);
		list.add(888);
		list.add(2);
		
		list.set(1, 777);
		
		list.remove(2); // 按照索引删除
		list.remove(new Integer(2)); // 按照元素删除

LinkedList

特征:

  1. 底层实现的是node节点,数据结构是双向链表,也可以作为队列(先进先出),栈(先进后出)
  2. 没有扩容的概念
  3. 有序的,可重复,可为null,有索引
  4. 线程不同步,多线程不安全的,如果要同步的LinkedList,List list = Collections.synchronizedList(new LinkedList(…))

常用方法

List接口的方法(与ArrayList类似)

add()\get()\remove()\set()\size()\clear()\contains()\isEmpty()\indexOf()\lastIndexOf()

Deque接口的方法
addFirst(E e)将指定元素插入到此列表的开头

addLast(E e)将指定元素插入到列表的结尾

getFirst()返回此列表的第一个元素

getLast()返回此列表的最后一个元素

removeFirst()移除并返回此列表的第一个元素

removeLast()移除并返回次列表的最后医个元素

offer(E e)将指定元素添加到此列表的末尾(最后 一个元素)

offerFirst(E e) 在此列表的开头插入指定的元素

offerLast(E e)在此列表的末尾插入指定的元素

peek()获取但不意出此列表的头(第一个元素)

peekFirst() 获取但不移除此列表的第一个元素;如果此列表为空,则返回null

peekLast() 获取但不移除此列表的最后一个元素;如果此列表为空,则返回null

poll()获取并移除系列表的头(第一个元素)

pollFirst()获取并移除此列表的第一个元素;如果次列表为空,则返回null

pollLast()获取并移除此列表的最后一个元素;如果此列表为空,则返回null


push(E e)将元素推入此列表所表示的堆栈

pop() 从此列表所表示的堆栈中弹出一个元素

执行List接口的方法:

@Test
	public void test1() {
		List<String> list = new LinkedList<>();
		list.add("Tom");
		list.add("Han");
		list.add("Marry");
		
		String name = list.get(2);
		
		int index = list.indexOf("Marry");
		
		System.out.println(list.get(0));
		System.out.println(list.get(list.size() - 1));
	}

执行Deque接口的方法:

@Test
	public void test2() {
		Deque<String> list = new LinkedList<>();
		list.add("java");
		list.add("python");
		list.addFirst("hello");
		list.addLast("world");
		System.out.println(list);
		
		System.out.println(list.getFirst());
		System.out.println(list.getLast());
		
		System.out.println(list.removeFirst());
		System.out.println(list);
	}

Vector

特征:

  1. 底层实现是接口,数据结构是线性表
  2. 默认容量是10
  3. 默认扩容为原容量的2倍
  4. 有序的、不唯一、可为null、有索引(会越界)
  5. 查找较快,插入删除较慢
  6. 线程同步的,多线程使用安全的,单线程使用效率较低

常用方法:

  • 可以参考ArrarList

考点:Vector和ArrayList的异同

Stack

  1. 继承自Vector类
  2. 实现了栈的数据结构
  3. 线程同步的,多线程使用安全的,单线程使用效率低
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JeffHan^_^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值