一、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);
}
}
运行结果:
圆日落河长直烟孤漠大
圆日落河长直烟孤漠大