Java基础——Day17——集合(ArrayList和LinkedList)

Day17笔记

一、集合(掌握)

1.1 定义

  • 集合是存储对象的对象
  • 是一个数据容器
  • 定义了对象元素进行操作的很多方法

1.2 Collection集合体系

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3ZugaRv1-1597799102714)(集合体系图.jpg)]

1.3 创建Collection对象

  • 因为Collection是接口,无法直接创建对象
  • 可以使用多态的方式,声明Collection的引用,引用指向Collection的实现类
package com.qf.coll;

import java.util.ArrayList;
import java.util.Collection;

public class Demo01 {
     
	public static void main(String[] args) {
     
		// 创建Collection集合的对象,执行实现类ArrayList
		Collection coll = new ArrayList();

	}
}

1.4 增加元素

  • add
  • addAll
package com.qf.coll;

import java.util.ArrayList;
import java.util.Collection;

public class Demo02 {
     
	public static void main(String[] args) {
     
		/**
		 *  增加
		 *   boolean add(E e) 
			          确保此 collection 包含指定的元素(可选操作)。 
			 boolean addAll(Collection c) 
			          将指定 collection 中的所有元素都添加到此 collection 中(可选操作)。 
		 */
		
		Collection coll = new ArrayList();
		
		coll.add("张三");
		coll.add(23);
		coll.add(true);
		coll.add("法外狂徒");
		
		System.out.println(coll);
		System.out.println(coll.size());
		
		coll.add("张三");
		coll.add(23);
		coll.add(true);
		coll.add("法外狂徒");
		
		System.out.println(coll);
		System.out.println(coll.size());
		
		Collection coll02 = new ArrayList();
		coll02.add("床前明月光");
		coll02.add("疑是地上霜");
		coll02.add("举头望明月");
		coll02.add("低头思故乡");
		
		System.out.println(coll02);
		
		// 把另一个集合中的元素全放入本集合
		coll.addAll(coll02);
		System.out.println(coll);
	}
}

1.5 删除元素

  • remove
  • removeAll
  • retainAll
  • clear
package com.qf.coll;

import java.util.ArrayList;
import java.util.Collection;

public class Demo03 {
	public static void main(String[] args) {
		/**	          
			删除
			 boolean remove(Object o) 
			          从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。 
			 boolean removeAll(Collection c) 
			          移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。 
			 boolean retainAll(Collection c) 
			          仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。 
			 void clear() 
			          移除此 collection 中的所有元素(可选操作)。 
 
		 */
		
		Collection coll01 = new ArrayList();
		coll01.add("111");
		coll01.add("222");
		coll01.add("333");
		coll01.add("宋江");
		coll01.add("李逵");
		coll01.add("鲁智深");
		System.out.println(coll01);
		
		boolean ret = coll01.remove("李逵");
		System.out.println(ret);
		
		ret = coll01.remove("李逵");
		System.out.println(ret);
		System.out.println(coll01);
		
		Collection coll02 = new ArrayList();
		coll02.add("111");
		coll02.add("222");
		coll02.add("333");
		coll02.add("444");
		System.out.println(coll02);
		
		// 删除两个集合的交集
		// ret = coll02.removeAll(coll01);
		System.out.println(ret);
		System.out.println(coll01);
		System.out.println(coll02);
		
		// 保存两个集合的交集
		ret = coll01.retainAll(coll02);
		System.out.println(ret);
		System.out.println(coll01);
		System.out.println(coll02);
		
		coll02.clear();
		System.out.println(coll02);
	}
}

1.6 查看元素

  • contains
  • containsAll
  • isEmpty
  • size
package com.qf.coll;

import java.util.ArrayList;
import java.util.Collection;

public class Demo04 {
     
	public static void main(String[] args) {
     
		/**	          
		查看          
		 boolean contains(Object o) 
		          如果此 collection 包含指定的元素,则返回 true。 
		 boolean containsAll(Collection c) 
		          如果此 collection 包含指定 collection 中的所有元素,则返回 true。  
		 boolean isEmpty() 
		          如果此 collection 不包含元素,则返回 true。 
		 Iterator iterator() 
		          返回在此 collection 的元素上进行迭代的迭代器。 
		 int size() 
		          返回此 collection 中的元素数。 
		          
		其他
		 Object[] toArray() 
		          返回包含此 collection 中所有元素的数组。 
		 T[] 
		 toArray(T[] a) 
		          返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。 
	 */
		
		Collection coll = new ArrayList();
		coll.add("虚竹");
		coll.add("段誉");
		coll.add("乔峰");
		coll.add("玄慈方丈");
		
		System.out.println(coll);
		
		System.out.println(coll.contains("虚竹"));
		
		Collection coll02 = new ArrayList();
		coll02.add("天山童姥");
		coll02.add("李秋水");
		coll02.add("木婉清");
		coll02.add("虚竹");
		coll02.add("段誉");
		coll02.add("乔峰");
		coll02.add("玄慈方丈");
		
		// 判断集合A是否完全包含集合B
		System.out.println(coll02.containsAll(coll));
		
		System.out.println(coll.isEmpty());
		System.out.println(coll.size());
	}
}

1.7 其他操作

  • toArray
  • iterator
package com.qf.coll;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class Demo05 {
     
	public static void main(String[] args) {
     
		/**	          
		其他
		 Object[] toArray() 
		          返回包含此 collection 中所有元素的数组。 
		 T[] 
		 toArray(T[] a) 
		          返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。 
		 */
		Collection coll = new ArrayList();
		coll.add("锄禾日当午");
		coll.add("汗滴禾下土");
		coll.add("谁知盘中餐");
		coll.add("粒粒皆辛苦");
		
		System.out.println(coll);
		System.out.println(coll.getClass().getName());
		
		Object[] arr = coll.toArray();
		System.out.println(arr);
		
		for (int i = 0; i < arr.length; i++) {
     
			System.out.println(arr[i]);
		}
		
		Iterator it = coll.iterator();
		while (it.hasNext()) {
     
			Object object = (Object) it.next();
			System.out.println(object);
		}
	}
}

二、List(掌握)

2.1 定义

  • 有序的Collection
  • 是Collection的子接口
  • 此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。
  • 列表通常允许重复的元素。更确切地讲,列表通常允许满足 e1.equals(e2) 的元素对 e1
    e2,并且如果列表本身允许 null 元素的话,通常它们允许多个 null 元素。

2.2 创建对象

  • List是一个接口,不能直接创建对象
  • List可以声明为引用,引用指向具体的实现类
package com.qf.list;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class Demo01 {
     
	public static void main(String[] args) {
     
		List list = new ArrayList();
		List list2 = new LinkedList();
	}
}

2.3 增加元素

  • add(e)
  • add(index,e)
  • addAll©
  • addAll(index,c)
package com.qf.list;

import java.util.ArrayList;
import java.util.List;

public class Demo02 {
     
	public static void main(String[] args) {
     
		/**
		 * 增加
		 *   boolean add(E e) 
			          向列表的尾部添加指定的元素(可选操作)。 
			 void add(int index, E element) 
			          在列表的指定位置插入指定元素(可选操作)。 
			 boolean addAll(Collection c) 
			          添加指定 collection 中的所有元素到此列表的结尾,顺序是指定 collection 的迭代器返回这些元素的顺序(可选操作)。 
			 boolean addAll(int index, Collection c) 
			          将指定 collection 中的所有元素都插入到列表中的指定位置(可选操作)。 
		 */
		
		List list01 = new ArrayList();
		list01.add("刘备");
		list01.add("关羽");
		list01.add("张飞");
		list01.add("陆逊");
		
		System.out.println(list01);
		
		list01.add(0,"曹操");
		
		System.out.println(list01);
		
		List list02 = new ArrayList();
		list02.add("许褚");
		list02.add("典韦");
		list02.add("张辽");
		list02.add("曹安民");
		
		System.out.println(list02);
		
		list01.addAll(1,list02);
		System.out.println(list01);
		
	}
}

2.4 删除元素

  • remove(index)
  • remove(object)
  • removeAll
  • retainAll(collection)
  • clear
package com.qf.list;

import java.util.ArrayList;
import java.util.List;

public class Demo03 {
     
	public static void main(String[] args) {
     
		/**			          
			删除
			 E remove(int index) 
			          移除列表中指定位置的元素(可选操作)。 
			 boolean remove(Object o) 
			          从此列表中移除第一次出现的指定元素(如果存在)(可选操作)。 
			 boolean removeAll(Collection c) 
			          从列表中移除指定 collection 中包含的其所有元素(可选操作)。 
			 boolean retainAll(Collection c) 
			          仅在列表中保留指定 collection 中所包含的元素(可选操作)。 
			 void clear() 
			          从列表中移除所有元素(可选操作)。 
		 */
		
		List list01 = new ArrayList();
		list01.add("刘备");
		list01.add("关羽");
		list01.add("张飞");
		list01.add("陆逊");
		
		List list02 = new ArrayList();
		list02.add("许褚");
		list02.add("典韦");
		list02.add("张辽");
		list02.add("曹安民");
		
		boolean ret = list01.remove("关羽");
		System.out.println(ret);
		System.out.println(list01);
		
		ret = list01.remove("关羽");
		System.out.println(ret);
		System.out.println(list01);
		
		System.out.println(list01.remove(1));
		System.out.println(list01.remove(1));
		
		list01.add(1);
		list01.add(1);
		list01.add(2);
		System.out.println(list01);
		
		// 优先以下标为参考移出元素
		list01.remove(2);
		System.out.println(list01);
		System.out.println(list01);
		
		list01.add("许褚");
		list01.add("典韦");
		list01.add("张辽");
		System.out.println(list01);
		
		// 移出集合A和B的交集
		// list01.removeAll(list02);
		System.out.println(list01);
		
		// 取出交集
		list01.retainAll(list02);
		System.out.println(list01);
	}
}

2.5 修改和删除

package com.qf.list;

import java.util.ArrayList;
import java.util.List;

public class Demo04 {
     
	public static void main(String[] args) {
     
		/**
		           修改
			 E set(int index, E element) 
			          用指定元素替换列表中指定位置的元素(可选操作)。         
		           查询
			 boolean contains(Object o) 
			          如果列表包含指定的元素,则返回 true。 
			 boolean containsAll(Collection c) 
			          如果列表包含指定 collection 的所有元素,则返回 true。 
			 E get(int index) 
			          返回列表中指定位置的元素。 
			 int indexOf(Object o) 
			          返回此列表中第一次出现的指定元素的索引;如果此列表不包含该元素,则返回 -1。 
			 boolean isEmpty() 
			          如果列表不包含元素,则返回 true。 
			 int lastIndexOf(Object o) 
			 	最后一次出现的位置
			 int size() 
			          返回列表中的元素数。 
		 */
		
		List list01 = new ArrayList();
		list01.add("刘备");
		list01.add("关羽");
		list01.add("张飞");
		list01.add("陆逊");
		
		List list02 = new ArrayList();
		list02.add("许褚");
		list02.add("典韦");
		list02.add("张辽");
		list02.add("曹安民");
		
		System.out.println(list01);
		
		// 通过索引找到具体的元素,再次赋值
		list01.set(3, "黄忠");
		System.out.println(list01);
		
		System.out.println(list01.contains("陆逊"));
		System.out.println(list01.containsAll(list02));
		
		System.out.println(list01.get(2));
		
		System.out.println(list01.indexOf("陆逊"));
		System.out.println(list01.indexOf("黄忠"));
		
		System.out.println(list01.size());
		
	}
}

三、ArrayList(重点掌握)

3.1 定义

  • List 接口的大小可变数组的实现。
  • 实现了所有可选列表操作,并允许包括 在内的所有元素。
  • 除了实现 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。
  • 基于数组实现的一个list集合

3.2 创建对象

  • 底层基于数组实现,创建的过程和数组基本一样
package com.qf.arrlist;

import java.util.ArrayList;

public class Demo01 {
     
	public static void main(String[] args) {
     
		/**
		 * 构造方法摘要 
			ArrayList() 
			          构造一个初始容量为 10 的空列表。 
			ArrayList(Collection c) 
			          构造一个包含指定 collection 的元素的列表,这些元素是按照该 collection 的迭代器返回它们的顺序排列的。 
			ArrayList(int initialCapacity) 
			          构造一个具有指定初始容量的空列表。 
		 */
		
		ArrayList list = new ArrayList();
		
		list.add("武松");
		list.add("大郎");
		list.add("西门大官人");
		System.out.println(list);
		
		ArrayList list02 = new ArrayList(list);
		System.out.println(list02);
		
		ArrayList list03 = new ArrayList(30);
	}
}

3.3 遍历ArrayList

  • for
  • while
  • foreach
  • iterator
  • listIterator
package com.qf.arrlist;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.ListIterator;

public class Demo03 {
     
	public static void main(String[] args) {
     
		/**
		 * 遍历ArrayList
		 * 	
		 */
		
		ArrayList list = new ArrayList();
		
		list.add("奔波儿灞");
		list.add("霸波尔奔");
		list.add("白骨精");
		list.add("金角大王");
		list.add("银角大王");
		list.add("铜角大王");
		
		System.out.println(list);
		
		System.out.println("=============for===============");
		for (int i = 0; i < list.size(); i++) {
     
			System.out.println(list.get(i));
		}
		
		System.out.println("=============while===============");
		int index = 0;
		while (index < list.size()) {
     
			System.out.println(list.get(index++));
		}
		
		System.out.println("=============foreach===============");
		/**
		 * 不使用下标就能遍历集合或者数组
		 * for(容器中的数据类型 临时遍历名 : 目标容器){
		 * 	循环进行的操作
		 * }
		 */
		for (Object name : list) {
     
			System.out.println(name);
		}
		
		System.out.println("=============iterator===============");
		Iterator it = list.iterator();
		while(it.hasNext()) {
     
			System.out.println(it.next());
		}
		
		System.out.println("=============listIterator===============");
		ListIterator lit = list.listIterator();
		while (lit.hasNext()) {
     
			Object object = (Object) lit.next();
			System.out.println(object);
		}
		
		while(lit.hasPrevious()) {
     
			System.out.println(lit.previous());
		}
	}
}

四、LinkedList

4.1 定义

  • List 接口的链接列表实现。
  • 实现所有可选的列表操作,并且允许所有元素(包括 )。
  • 除了实现 接口外, 类还为在列表的开头及结尾 、 和 元素提供了统一的命名方法。
  • 这些操作允许将链接列表用作堆栈、或。nullListLinkedListgetremoveinsert队列双端队列

4.2 创建对象

4.3 常用方法

package com.qf.linkedlist;

import java.util.LinkedList;

public class Demo01 {
     
	public static void main(String[] args) {
     
		StringBuffer sb = new StringBuffer();
		LinkedList list = new LinkedList();
		
		list.add("奔波儿灞");
		list.add("霸波尔奔");
		list.add("白骨精");
		list.add("金角大王");
		list.add("银角大王");
		list.add("铜角大王");
		
		System.out.println(list.pop());
		// 编写代码,验证LinkedList中的增删改查的方法
	}
}

你可能感兴趣的:(java学习,java)