Java集合(一)

集合

概念:集合是Java API所提供的一系列类,可以用于动态存放多个对象。集合只能存对象集合与数组的不同在于,集合是大小可变的序列,而且元素类型可以不受限定,只要是引用类型。(集合中不能放基本数据类型,但可以放基本数据类型的包装类),集合类全部支持泛型,是一种数据安全的用法。

集合的继承关系

在这里插入图片描述

Collection

Collection接口的常用方法(其实现子类都可以使用)

方法名作用
int size()返回此collection中的元素数。
boolean isEmpty()判断此collection中是否包含元素。
boolean contains(Object obj)判断此collection是否包含指定的元素。
boolean contains(Collection c)判断此collection是否包含指定collection中的所有元素。
boolean add(Object element)向此collection中添加元素。
boolean addAll(Collection c)将指定collection中的所有元素添加到此collection中
boolean remove(Object element)从此collection中移除指定的元素。
boolean removeAll(Collection c)移除此collection中那些也包含在指定collection中的所有元素。
void clear()移除些collection中所有的元素。
boolean retainAll(Collection c)仅保留此collection中那些也包含在指定collection的元素。
Iterator iterator()返回在此collection的元素上进行迭代的迭代器。
Object[] toArray()把此collection转成数组。

List接口

List接口是Java集合框架中的一个接口,继承自Collection接口。List接口用于表示一个有序、可重复的集合,可以通过索引(位置)来访问和修改其中的元素。List接口的常用实现类包括ArrayList、LinkedList和Vector等。

相对于Collection接口新增的方法

方法名功能
public Object get(int index)根据下标,返回列表中的元素
public Object add(int index, Object element)在列表的指定位置插入指定元素.将当前处于该位置的元素(如果有的话)和所有后续元素向右移动
public Object set(int index, Object element)用指定元素替换列表中指定位置的元素
public Object remove(int index)移除列表中指定位置的元素

List接口实现类

  • ArrayList
    ​ 数据结构:一维数组
    ​ 特点:存储数据
  • LinkedList
    ​ 数据结构:双向列表
    ​ 特点:队列模式、栈模式
  • Vector
    ​ 数据结构:一维数组
    ​ 特点:线程安全
  • Stack
    ​ 继承关系:class Stack extends Vector,底层为栈
    ​ 特点:栈模式
ArrayList

代码实现:

public class Test02 {
	public static void main(String[] args) {
		ArrayList<String> list = new ArrayList<>();
		//添加数据
		list.add("吴彦祖");
		list.add("谢霆锋");
		list.add("刘宪华");
		list.add("彭于晏");
		list.add("周杰伦");
		//设置指定下标上的元素
		list.set(1, "王力宏");
		//获取指定下标上的元素
		String str = list.get(1);
		System.out.println("获取指定下标上的元素:" + str);//王力宏
		//获取元素个数
		int size = list.size();
		System.out.println("获取元素个数:" + size);//5
		//在指定下标上添加元素
		list.add(2, "薛之谦");
		ArrayList<String> newList1 = new ArrayList<>();
		Collections.addAll(newList1, "aaa","bbb","ccc","ccc");//利用集合工具类(Collections)批量添加元素
		list.addAll(newList1);//将newList1中所有的元素都添加到list集合里末尾的位置
		ArrayList<String> newList2 = new ArrayList<>();
		Collections.addAll(newList2, "xxx","xxx","yyy","yyy","zzz","zzz");//利用集合工具类(Collections)批量添加元素
		list.addAll(3, newList2);//将newList2中所有的元素都添加到list集合里指定下标的位置
		//清空集合里所有的元素
		//list.clear();
		System.out.println("判断集合中是否包含指定元素:" + list.contains("王力宏"));//true
		System.out.println("判断集合中是否包含指定集合:" + list.containsAll(newList1));//true
		System.out.println("获取元素在集合中第一次出现的下标:" + list.indexOf("ccc"));//12
		System.out.println("获取元素在集合中最后一次出现的下标:" + list.lastIndexOf("ccc"));//13
		
		//没有-true,有-false
		System.out.println("判断集合里是否没有元素:" + list.isEmpty());//false
		list.remove(9);//通过下标删除元素
		list.remove("刘宪华");//通过数据删除元素
		list.removeAll(newList1);//将list中有newList1的元素全部删除(去除交集)
		list.retainAll(newList2);//将list中有newList2的元素全部保留(保留交集)
		List<String> subList = list.subList(1, 4);//从开始下标处(包含)截取到结束下标处(排他)的元素,返回新的集合
		//将集合转换为数组
		Object[] array1 = subList.toArray();
		System.out.println(Arrays.toString(array1));//[xxx, yyy, yyy]
		
		//将集合转换为指定类型的数组
		String[] array2 = new String[3];
		subList.toArray(array2);
		System.out.println(Arrays.toString(array2));//[xxx, yyy, yyy]
		System.out.println("-----------------------------------------");
		//遍历集合 -- for循环
		for (int i = 0; i < list.size(); i++) {
			System.out.println(list.get(i));
		}
		System.out.println("-----------------------------------------");
		//遍历集合 -- foreach
		for (String element : list) {
			System.out.println(element);
		}
		System.out.println("-----------------------------------------");
		//遍历集合 -- Iterator
		Iterator<String> it = list.iterator();
		while(it.hasNext()){//判断是否有可迭代的元素
			String next = it.next();//获取下一个元素
			System.out.println(next);
		}
		System.out.println("-----------------------------------------");
		//遍历集合 -- ListIterator
		ListIterator<String> listIterator = list.listIterator();
		while(listIterator.hasNext()){//判断是否有可迭代的元素
			String next = listIterator.next();//获取下一个元素
			System.out.println(next);
		}
	}
}
LinkedList

特有方法:

方法功能
void addFirst(E e)将指定元素插入到次列表的开头
void addLast(E e)将指定元素添加到此列表的结尾
E getFirst()返回此列表的第一个元素
E getLast()返回此列表的最后一个元素
E removeFirst()移除并返回此列表的第一个元素
E removeLast()移除并返回此列表的最后一个元素
E pop()从此列表所表示的堆栈处弹出一个元素
void push(E e)将元素推入此列表所表示的堆栈

独有方法的代码实现:

public class Test02 {
	public static void main(String[] args) {
		LinkedList<String> list = new LinkedList<>();
		list.add("王力宏");
		list.add("薛之谦");
		list.add("周杰伦");
		list.add("abc");
		list.add("abc");
		list.add("AAA");
		list.add("abc");
		list.add("abc");
		//添加到头部
		list.addFirst("aaa");
		list.offerFirst("bbb");
		list.push("ccc");
		//添加到末尾
		list.addLast("xxx");
		list.offer("yyy");
		list.offerLast("zzz");
		System.out.println("获取第一个元素:" + list.element());
		System.out.println("获取第一个元素:" + list.getFirst());
		System.out.println("获取第一个元素:" + list.peek());
		System.out.println("获取第一个元素:" + list.peekFirst());
		System.out.println("获取第一个元素:" + list.pop());
		System.out.println("获取最后一个元素:" + list.getLast());
		System.out.println("获取最后一个元素:" + list.peekLast());
		//删除第一个元素
		list.poll();
		list.pollFirst();
		list.removeFirst();
		//删除最后一个元素
		list.pollLast();
		list.removeLast();
		//删除第一次出现的元素
		list.removeFirstOccurrence("abc");
		//删除最后一次出现的元素
		list.removeLastOccurrence("abc");
		//倒序遍历
//		Iterator<String> descendingIterator = list.descendingIterator();
//		while(descendingIterator.hasNext()){
//			String next = descendingIterator.next();
//			System.out.println(next);
//		}
		
		for (String element : list) {
			System.out.println(element);
		}
	}
}
LinkedList实现队列模式
public class Test03 {
	public static void main(String[] args) {
		LinkedList<String> list = new LinkedList<>();
		list.add("aaa");
		list.add("bbb");
		list.add("ccc");
		list.add("ddd");
		list.add("eee");
		while(!list.isEmpty()){
			//String element = list.pollFirst();
			String element = list.removeFirst();
			System.out.println(element);
		}
		System.out.println("集合的元素个数为:" + list.size());//0
	}
}
LinkedList实现栈模式
public class Test04 {
	public static void main(String[] args) {
		LinkedList<String> list = new LinkedList<>();
		list.add("aaa");
		list.add("bbb");
		list.add("ccc");
		list.add("ddd");
		list.add("eee");
		while(!list.isEmpty()){
			String element = list.removeLast();
			System.out.println(element);
		}
		System.out.println("集合的元素个数为:" + list.size());//0
	}
}
Vector

vector的使用同ArrayList一致,不再赘述,这里只阐述一下Vector的以往实现方式

public class Test02 {
	/**
	 * 知识点:Vector老的方法
	 * 理解:Vector属于元老级别的集合类(JDK1.0),JDK1.2开始才有集合框架的概念,
	 * 		为了将Vector保留下来,Java的设计者让Vector多实现了List接口
	 */
	public static void main(String[] args) {
		Vector<String> v = new Vector<>();
		v.addElement("aaa");
		v.addElement("bbb");
		v.addElement("ccc");
		v.addElement("ddd");
		v.addElement("eee");
		v.removeElementAt(0);//根据下标删除元素
		v.removeElement("bbb");//根据数据删除元素
		Enumeration<String> elements = v.elements();
		while(elements.hasMoreElements()){
			String nextElement = elements.nextElement();
			System.out.println(nextElement);
		}
	}
}
Stack

代码实现:

public class Test01 {
	/**
	 * 继承关系:class Stack extends Vector
	 * 特点:栈模式	
	 */
	public static void main(String[] args) {
		Stack<String> stack = new Stack<>();
		//将元素添加到栈顶
		stack.push("aaa");
		stack.push("bbb");
		stack.push("ccc");
		stack.push("ddd");
		stack.push("eee");
		System.out.println("获取栈顶元素:" + stack.peek());
		System.out.println("获取元素到栈顶的距离:" + stack.search("bbb"));//4 - 从1开始数
		//判断集合是否为空内容
		while(!stack.empty()){
			//删除栈顶元素,并返回
			String pop = stack.pop();
			System.out.println(pop);
		}	
	}
}
  • 18
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值