集合框架 Collection 接口的特点以及具体实现类ArrayList类 LinkedList类 Vector类

一、Collection 接口

1.单列集合

2.子接口

list 接口:

特点:有序、允许重复

具体实现类

ArrayList类
    数据结构:Object[ ] elementData
    扩容

  • 无参构造方法,数组的容量初始化为空
  • 添加第1个元素时,数组的容量扩容为10
  • 当容量不足时,数组的容量按照1.5倍扩容

    特点:适合遍历、查找
    常用方法

  • add( E e):添加新元素至集合的指定位置
  • add(int index , E e):添加新元素至集合的指定位置
  • addAll(Collection c): 添加集合中所有的元素至当前集合
  • addAll(int index , Collection c):添加另外一个集合中所有的元素至当前集合
  • get(int index):获取元素(按照下标位置,获取元素)
  • remove(int index):删除元素 按照下标进行删除)
  • remove(Object value):删除元素 按照值进行删除)
  • indexOf(Object o):查找元素
  • set (int index ,E element):按照下标位置修改 

 LinkedList类
    数据结构:双向链表

  • 链表由若干个Node对象组成
  • 链表不扩容,每次添加元素时,都创建一个Node,并加入链表

    特点:适合插入、删除
    常用方法

  • add():获取链表的头元素
  • getLast():获取链表的尾元素
  • remove():删除元素
  • 1.根据下标,在链表中删除元素
  • 2.根据值,在链表中删除元素
  • removeFirst():删除链表的头元素
  • removeLast():删除链表的尾元素

Vector类
    数据结构:Object[] elementData
    特点:线程安全
    子类:Stack类
     特点:Stack是一个“栈”的实现类,具备Fist In Last Out 先进后出的特点。
     常用方法

  • push(E item):添加新元素(向栈顶添加)
  •  E pop():获取元素(从栈顶获取并删除)
  •  E peek(): 获取元素(从栈顶获取) 
package com.ztt.Demo01;

import java.util.ArrayList;

public class demo01 {
	public static void main(String[] args) {
		//数组:一组相同数据的数据容器,在内存中分配“连续空间”进行保存
		//问题1:容量
		//问题2:不擅长"插入"、"删除"等操作
		
		int[] array=new int[10];
		array[0]=1;
		
		//集合:通过某个集合类,创建该集合类的对象
		ArrayList list = new ArrayList();
		list.add(1);
	}
}
package com.ztt.Demo01;

import java.util.ArrayList;

public class demo02 {
	
	public static void main(String[] args) {
			//创建集合对象
			ArrayList<String> list = new ArrayList<String>();
			
			// 操作1: 添加新元素【add() addAll()方法】
			// add(E e)方法 : 添加新元素至集合的尾部
			list.add("小乔");
			list.add("曹操");
			list.add("刘备");
			list.add("后羿");
			System.out.println(list);
			
			// add(int index,E e)方法 : 添加新元素至集合的指定位置
			list.add(1, "李白");
			System.out.println(list);
			
			// addAll(Collection c) 方法
			// addAll(int index,Collection c) 方法
			// 添加另外一个集合中所有的元素至当前集合
			
			ArrayList<String> subList = new ArrayList<String>();
			subList.add("孙悟空");
			subList.add("猪八戒");
			subList.add("白骨精");
			
			// 将subList中的所有元素添加至list集合的尾部
			//list.addAll(subList);
			list.addAll(0, subList);
			System.out.println(list);
		}
	}

运行结果:

[小乔, 曹操, 刘备, 后羿]
[小乔, 李白, 曹操, 刘备, 后羿]
[孙悟空, 猪八戒, 白骨精, 小乔, 李白, 曹操, 刘备, 后羿]
package com.ztt.Demo01;

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

public class demo03 {

	public static void main(String[] args) {
		//创建临时的List集合
		List<String> girlList=Arrays.asList("张甜甜","袁艺鸣","任敏","韩乔菲","史碧蓉","张雅丽");
		
		//全部添加至ArrayList集合中
		ArrayList<String> list=new ArrayList<String>();
		list.addAll(girlList);
		
		System.out.println(list);
		
		//操作2:获取元素(按照下标位置,获取元素)
		//get(int index)
		String first=list.get(0);
		String last=list.get(list.size()-1);
		System.out.println("首元素:"+first);
		System.out.println("尾元素:"+last);
		
		//操作3:删除元素(按照下标或值,进行删除)
		//remove(int index)按照下标删除
		//remove(Object value)按照值删除
		System.out.println("删除前:"+list);
		
		list.remove(1);//按照下标删除
		list.remove("任敏");//按照值删除
		
		System.out.println("删除后:"+list);
		
		//操作4:查找元素
		//indexOf(Object o)
		int index1=list.indexOf("田恬");
		System.out.println("查找一个不存在的元素时:"+index1);
		
		int index2=list.indexOf("张甜甜");
		System.out.println("查找一个已存在的元素时:"+index2);
		
		//操作5:修改元素
		//set(int index,E element):按照下标位置修改
		System.out.println("修改前:"+list);
		list.set(1, "艺鸣");
		System.out.println("修改后:"+list);
		

	}

}

运行结果:

[张甜甜, 袁艺鸣, 任敏, 韩乔菲, 史碧蓉, 张雅丽]
首元素:张甜甜
尾元素:张雅丽
删除前:[张甜甜, 袁艺鸣, 任敏, 韩乔菲, 史碧蓉, 张雅丽]
删除后:[张甜甜, 韩乔菲, 史碧蓉, 张雅丽]
查找一个不存在的元素时:-1
查找一个已存在的元素时:0
修改前:[张甜甜, 韩乔菲, 史碧蓉, 张雅丽]
修改后:[张甜甜, 艺鸣, 史碧蓉, 张雅丽]
package com.ztt.Demo01;

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

public class demo04 {
	public static void main(String[] args) {
List<String> girlList=Arrays.asList("张甜甜","袁艺鸣","任敏","韩乔菲","史碧蓉","张雅丽");
		
		//全部添加至ArrayList集合中
		ArrayList<String> list=new ArrayList<String>();
		list.addAll(girlList);
		
		System.out.println(list);
		
		//清空
		//list.clear();
		
		//查看元素是否存在
		//boolean isContains = list.contains( "张甜甜");
		//System.out.println(isContains );
		
		//截取子集合
		//List<String> subs = list.subList(0,3);
		//System.out.println( subs ) ;
		
		//转换成数组
		Object[]array1 = list.toArray(); // object数组
		String[] array2=list.toArray(new String[list.size()]);
		
		System.out.println(Arrays.toString(array1));
		System.out.println(Arrays.toString(array2));
	}
}

运行结果:

[张甜甜, 袁艺鸣, 任敏, 韩乔菲, 史碧蓉, 张雅丽]
[张甜甜, 袁艺鸣, 任敏, 韩乔菲, 史碧蓉, 张雅丽]
[张甜甜, 袁艺鸣, 任敏, 韩乔菲, 史碧蓉, 张雅丽]
package com.ztt.Demo01;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;

public class demo05 {
	public static void main(String[] args) {
		ArrayList<String> list=new ArrayList<String>();
		list.addAll(Arrays.asList("E","D","K","M","N","A"));
		
		//方式1:冒泡排序
		for(int i=0,n=list.size();i<n-1;i++) {
			for(int k=0;k<n-1-i;k++) {
				if(list.get(k).compareTo(list.get(k+1))>0) {
					String temp=list.get(k);
					list.set(k, list.get(k+1));
					list.set(k+1, temp);
				}
			}
		}
		System.out.println(list);
		
		//方式2:使用sort()方法
		list=new ArrayList<String>();
		list.addAll(Arrays.asList("E","D","K","M","N","A"));
		list.sort(new Comparator<String>() {

			@Override
			public int compare(String o1, String o2) {
				
				return o1.compareTo(o2);
			}
		});
		System.out.println(list);
	}
}

运行结果:

[A, D, E, K, M, N]
[A, D, E, K, M, N]
package com.ztt.Demo01;

import java.util.ArrayList;
import java.util.Arrays;

public class demo06 {
	public static void main(String[] args) {
		//通过【无参构造方法】创建ArrayList集合
		//数组默认被初始化成一个空数组
		ArrayList<Integer> list1=new ArrayList<Integer>();
		list1.add(1587);//添加第1个元素时,将数组扩容为10
		list1.add(1852);//添加第2个元素
		list1.add(1555);//添加第..个元素
		list1.add(9527);//添加第10个元素
		
		//添加第11个元素时,容量不足,再次将数组扩容,按照原容量的1.5倍
		list1.add(1024);
		
		//通过【有参构造方法】创建ArrayList集合
		//根据预估数据元素的规模数量,初始化elementData数组
		//减少扩容的次数频率
		ArrayList<Integer> list2=new ArrayList<Integer>(200);
		//创建集合时,传入另外一个collection集合,并且按照该集合的元素进行初始化
		ArrayList<Integer> list3=new ArrayList<Integer>(Arrays.asList(1,2,3,4));
	}
}
package com.ztt.Demo01;

import java.util.LinkedList;

public class demo07 {
	public static void main(String[] args) {
		LinkedList<String> list=new LinkedList<String>();
		
		//添加新元素
		// add() /list.addLast() :将新元素添加至链表的尾部
		list.add("s1");
		list.add("s2");
		list.add("s3");
		list.add("s4");
		list.addLast("s5");
		System.out.println(list);
		
		//将新元素添加至链表的头部
		list.addFirst("sx");
		System.out.println(list);
		
		//获取元素
		//根据元素的下标位置,在链表中通过遍历,查找获取元素
		String item = list.get(1);
		System.out.println(item);
		
		//获取链表的头元素和尾元素
		String first = list.getFirst();
		String last = list.getLast();
		System.out.println(first);
		System.out.println(last);
		
		//删除元素
		list.remove(2); //根据下标,在链表中删除元素
		list.remove("s1"); //根据值,在链表中删除元素
		System.out.println(list);
		
		list.removeFirst(); //删除链表的头元素
		list.removeLast(); //删除链表的尾元素
		System.out.println(list);
	}
}

运行结果:

[sx, s1, s2, s3, s4, s5]
s1
sx
s5
[sx, s3, s4, s5]
[s3, s4]
package com.ztt.Demo01;

import java.util.Stack;

public class demo08 {
	public static void main(String[] args) {
		//创建“栈”
		Stack<String> stack=new Stack<String>();
		
		//添加新元素(向栈顶添加)
		stack.push("s1");
		stack.push("s2");
		stack.push("s3");
		stack.push("s4");
		stack.push("s5");
		stack.push("s6");
		
		System.out.println(stack);
		
		//获取元素(从栈顶获取并删除)
//		System.out.println(stack.pop());
//		System.out.println(stack.pop());
//		System.out.println(stack.pop());
//		System.out.println(stack);
		
		//获取元素(从栈顶获取)
//		System.out.println(stack.peek());
//		System.out.println(stack.peek());
//		System.out.println(stack.peek());
		
		//遍历栈
		while(!stack.isEmpty()) {
			System.out.println(stack.pop());
		}
		
	}
}

运行结果:

[s1, s2, s3, s4, s5, s6]
s6
s5
s4
s3
s2
s1
package com.ztt.Demo01;

import java.util.Stack;

public class demo09 {
	public static void main(String[] args) {
		String s="大漠孤烟直长河落日圆";
		//方式1:StringBuilder
		StringBuilder sb=new StringBuilder(s);
		sb.reverse();
		System.out.println(sb);
		
		//方式2:Stack栈
		Stack<Character> stack=new Stack<Character>();
		for(int i=0;i<s.length();i++) {
			char c=s.charAt(i);
			stack.push(c);
		}
		
		StringBuilder ret=new StringBuilder();
		while(!stack.isEmpty()) {
			ret.append(stack.pop());
		}
		System.out.println(ret);
	}
}

运行结果:

圆日落河长直烟孤漠大
圆日落河长直烟孤漠大

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值