Java集合——List、ArrayList、LinkedList、Vector、队列及栈详解、HashSet、TreeSet、LinkedHashSet

List:

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

public class ListFunction {

	public static void main(String[] args) {
		//List list=new ArrayList();      报错
		//ArrayList list=new ArrayList();  警告
		ArrayList<String> list=new ArrayList<String>();
		list.add("a");
		list.add("b");
		list.add("c");
		list.add("d");
		
		// 使用list中添加方法 add(int index, Object obj)
        // 添加的角标就是后面元素所在的位置  不能越界
		list.add(3,"x");
		System.out.println(list);
		
		 // 通过角标获取对应的元素
		Object object=list.get(1);
		System.out.println(object);
		
		// 通过get 方法 进行遍历
		for(int i=0;i<list.size();i++) {
			Object object2=list.get(i);
			System.out.println(object2);
		}
		
		// set 方法 不要越界
		list.set(0, "z");
		System.out.println(list);
		
		// 根据角标删除 返回的是被删除的元素 
		Object remove=list.remove(3);
		System.out.println(remove);
		System.out.println(list);
		
		//删除时应该注意
		ArrayList  list1=new ArrayList();
		list1.add(111);
		list1.add(222);
		list1.add(333);
		
		// 删除 111 元素
		//list1.remove(0);
		
		// 删除时 系统没自动装箱 就按数字传入的方法
        // 调用的是 按角标删除的方法调用 所以越界
		//list1.remove(111);
		
		// 如果非要使用按元素删除 需要手动装箱
		list1.remove(Integer.valueOf(111));
		System.out.println(list1);
		
		/*
		* 需求:
		* 集合中添加 a b c d
		* 遍历集合  如果有b 就添加一个 "oh~yes"
		*/
		
		ArrayList<String> list2=new ArrayList<String>();
		list2.add("a");
		list2.add("b");
		list2.add("c");
		list2.add("d");
		
		/*
		 //这段代码没有问题
		for(int i=0;i<list2.size();i++) {
			Object objectstr=list2.get(i);
			if(objectstr.equals("b")) {
				list2.add("oh~yes");
			}
		}
		*/
		
		
		
		 //这段代码报错了
		 // 如果使用迭代器遍历  那么 长度必须是固定的 4不能变
		/*
		Iterator iterator=list2.iterator();
		while(iterator.hasNext()) {
			if(iterator.next().equals("b")) {
				// ConcurrentModificationException 发生并发修改异常
                // 注意:在迭代器遍历的时候 不要直接使用集合做操作
				list2.add("oh~yes");   //相当于修改了集合长度
			}
		}*/
		
		//这段代码没有问题 
		// 取出list特有的迭代器
		ListIterator listIterator=list2.listIterator();
		while(listIterator.hasNext()) {
			if(listIterator.next().equals("b")) {
				
				// 让迭代器 向集合中 添加元素
				//注意: 在迭代器中进行对集合的添加或删除 要使用迭代器中的方法,不能直接使用集合去操作
				listIterator.add("oh~yes");
			}
		}
		
		System.out.println(list2);
		
		
		/***逆向****/
		ListIterator listIterator1=list2.listIterator();
		//正向
		while(listIterator1.hasNext()) {
			System.out.println(listIterator1.next());
		}
		
		//hashPrevious判断有没有前一个元素
		while(listIterator1.hasPrevious()) {
			System.out.println(listIterator1.previous());
		}
	}
	
	

}
运行结果:

[a, b, c, x, d]
b
a
b
c
x
d
[z, b, c, x, d]
x
[z, b, c, d]
[222, 333]
[a, b, oh~yes, c, d]
a
b
oh~yes
c
d
d
c
oh~yes
b

a

Vector:

import java.util.Enumeration;
import java.util.Vector;

public class Vectorexample {

	public static void main(String[] args) {
		// 创建一个Vector集合
		Vector vector=new Vector();
		vector.addElement("a");
		vector.addElement("b");
		vector.addElement("c");
		vector.addElement("d");
		System.out.println(vector);
		
		// 迭代器遍历
        // 获取Vector 中的迭代器
		Enumeration elements=vector.elements();
		while(elements.hasMoreElements()) {
			// 输出元素
			System.out.println(elements.nextElement());
		}

	}

运行结果:

[a, b, c, d]
a
b
c
d

LinkedList:(有单向和双向之分,下面代码写的是双向)

import java.util.LinkedList;

public class LinkedListexample {

	public static void main(String[] args) {
		
		LinkedList linkedList=new LinkedList();
		
		linkedList.addFirst("a");
		linkedList.addFirst("b");
		linkedList.addFirst("c");
		linkedList.addFirst("d");
		
		linkedList.addLast("a");
		linkedList.addLast("b");
		linkedList.addLast("c");
		linkedList.addLast("d");
		linkedList.addLast("e");
		System.out.println(linkedList);
		
		System.out.println(linkedList.getFirst());
		System.out.println(linkedList.getLast());

	}

}
运行结果:
[d, c, b, a, a, b, c, d, e]
d

e

单链表和双链表的区别:

单链表:


又链表:


Set:

HashSet\LinkedHashSet\TreeSet

import java.util.ArrayList;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Scanner;
import java.util.TreeSet;

public class Setexample {

	public static void main(String[] args) {
		
		HashSet<String> set=new HashSet<>();
		
		boolean add=set.add("d");
		boolean add2=set.add("d");
		
		set.add("a");
		set.add("a");
		set.add("b");
		set.add("c");
		
		System.out.println(add);
		System.out.println(add2);
		System.out.println(set);
		
		//使用HashSet主要用来去重
		
		
		
		//LinkedHshSet
		LinkedHashSet<String> set1=new LinkedHashSet<>();
		set1.add("l");
		set1.add("w");
		set1.add("w");
		set1.add("a");
		set1.add("n");
		set1.add("g");
		System.out.println(set1);
		
		
		//输入一个字符串,去掉其中重复字符
		
		Scanner scanner=new Scanner(System.in);
		String string=scanner.nextLine();
		LinkedHashSet<Character> set2=new LinkedHashSet<>();
		char[] charArray=string.toCharArray();
		for(int i=0;i<charArray.length;i++) {
			set2.add(charArray[i]);
		}
		System.out.println("set2"+"="+set2);
		
		ArrayList<String> arrayList=new ArrayList<>();
		arrayList.add("a");
		arrayList.add("a");
		arrayList.add("b");
		arrayList.add("b");
		arrayList.add("c");
		arrayList.add("c");
		System.out.println("arrayList"+"="+arrayList);
		
		LinkedHashSet<String> lhs=new LinkedHashSet<>();
		lhs.addAll(arrayList);
		System.out.println("lhs"+"="+lhs);
		arrayList.clear();
		arrayList.addAll(lhs);
		System.out.println("arrayList"+"="+arrayList);
		
		
		//TreeSet
		//TreeSet(内部实现二叉树)
		//特点:无序 不重复
		//主要作用:排序
		
		TreeSet<Integer> treeSet=new TreeSet<>();
		treeSet.add(1);
		treeSet.add(13);
		treeSet.add(1);
		treeSet.add(3);
		treeSet.add(2);
		
		for(Integer integer:treeSet) {
			System.out.println(integer);
		}
		
	}

}

运行结果:
true
false
[a, b, c, d]
[l, w, a, n, g]
sfyrjdgdffdaewff   这一行字符串是从键盘输入的
set2=[s, f, y, r, j, d, g, a, e, w]
arrayList=[a, a, b, b, c, c]
lhs=[a, b, c]
arrayList=[a, b, c]
1
2
3

13


猜你喜欢

转载自blog.csdn.net/weixin_39430584/article/details/80900514