Java集合
1.Collections
1.1Collections接口的add方法
code:
import java.util.*;
public class AddSelftDemo {
public static void main(String[] args) {
//Collections中的addAll()方法演示
//声明并实例化List类对象
List<String> list = new ArrayList<String>();
//添加元素
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
list.add("6");
//添加自身
list.addAll(list);
//输出
System.out.println(list);
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
System.out.print(iterator.next() + " ");
}
System.out.println("\n" + "换行");
Set<String> set = new HashSet<String>();
//添加元素
set.add("1");
set.add("2");
set.add("3");
set.add("4");
set.add("5");
set.add("6");
//添加自身(然而set不能添加自身)
set.addAll(set);
//输出
System.out.println(set);
Iterator<String> iterator1 = set.iterator();
while (iterator1.hasNext()) {
System.out.print(iterator1.next() + " ");
}
}
}
输出结果:
1.2Collections接口的toArray方法
code:
import java.util.ArrayList;
import java.util.List;
public class ToArrayDemo {
public static void main(String[] args){
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
list.add("6");
//无参toArray()
Object[] str = list.toArray();
//遍历数组
printArr(str);
System.out.println();
//有参toArray()
//参数中的数组长度较短
String[] str01 = new String[list.size() - 1];
String[] str02 = list.toArray(str01);
//遍历str01 str02
System.out.println("参数中的数组长度较短");
printArr(str01);
printArr(str02);
System.out.println();
//参数中的数组长度刚好
System.out.println("参数中的数组长度刚好");
str01 = new String[list.size()];
str02 = list.toArray(str01);
printArr(str01);
printArr(str02);
System.out.println();
//有一个初始值,长度刚好,添加的"demo"忽略了
System.out.println("有一个初始值,长度刚好");
str01[0] = "demo";
str02 = list.toArray(str01);
printArr(str01);
printArr(str02);
System.out.println();
//长度较长
System.out.println("长度较长");
str01 = new String[list.size() + 2];
str02 = list.toArray(str01);
printArr(str01);
printArr(str02);
System.out.println();
//长度较长,有一个初始值
System.out.println("长度较长,有一个初始值");
str01 = new String[list.size() + 2];
str01[list.size() + 1] = "demo";
str02 = list.toArray(str01);
printArr(str01);
printArr(str02);
System.out.println();
}
static void printArr(Object[] str){
//遍历数组
System.out.println("-----数组元素如下:-----");
for(int i = 0 ; i < str.length ; i++){
System.out.print(str[i] + " ");
}
System.out.println();
}
}
输出结果:
2.Map接口
code:
import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
import sun.invoke.empty.Empty;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class MapMethodDemo {
public static void main(String[] args) {
//声明实例化100000个学生对象
Student[] stu = new Student[100000];
for (int i = 0; i < stu.length; i++) {
stu[i] = new Student("2019010101" + (i + 1), "张" + (i + 1), 18, "港航2班");
}
//加入到Map中
Map<String, Student> map = new HashMap<String, Student>();
for (int i = 0; i < stu.length; i++) {
map.put(stu[i].no, stu[i]);
}
//遍历
//映射关系
Set<Map.Entry<String, Student>> set = map.entrySet();
//iterator()
System.out.println("-----iterator()遍历-----");
long start = System.currentTimeMillis();
Iterator<Map.Entry<String, Student>> iterator = set.iterator();
while (iterator.hasNext()) {
Map.Entry<String, Student> entry = iterator.next();
Student stu01 = entry.getValue();
//System.out.println(entry.getKey() + " ");
stu01.print();
}
long end = System.currentTimeMillis();
//toArray()
System.out.println("------toArray()遍历-----");
long start01 = System.currentTimeMillis();
Object[] obj = set.toArray();
for (int i = 0; i < obj.length; i++) {
Map.Entry<String, Student> entry = (Map.Entry<String, Student>) obj[i];
Student stu01 = entry.getValue();
stu01.print();
}
long end01 = System.currentTimeMillis();
//查找前100名学生是否存在
//key
long start02 = System.currentTimeMillis();
for (int i = 0; i < 1000; i++) {
boolean isExist = map.containsKey(stu[i].no);
System.out.println(stu[i].no + ((isExist) ? "存在" : "不存在 "));
}
long end02 = System.currentTimeMillis();
//value
long start03 = System.currentTimeMillis();
for (int i = 0; i < 1000; i++) {
boolean isExist = map.containsKey(stu[i]);
System.out.println(stu[i].no + ((isExist) ? "存在" : "不存在 "));
}
long end03 = System.currentTimeMillis();
//输出耗时
System.out.println("iterator()遍历耗时:" + (end - start));
System.out.println("toArray()遍历耗时:" + (end01 - start01));
System.out.println("key查找耗时" + (end02 - start02));
System.out.println("value查找耗时" + (end03 - start03));
}
}
输出结果:
遍历结果
查找结果
耗时结果
3.List接口
code:
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class ListMethodDemo {
public static void main(String[] args) {
//List实例化
List<String> list = new ArrayList<String>();
//添加
//向其中添加一个元素"1"
list.add("1");
traverse(list);
//在第一个位置添加一个元素“2”
list.add(0, "2");
traverse(list);
//在第二个元素添加一个元素“8”
list.add(1, "8");
traverse(list);
//在第一个位置添加list
list.addAll(0, list);
traverse(list);
//查找
//indexOf() lastdexOf()
//查找元素2所在的位置
System.out.println("最先出现2的位置:" + list.indexOf("2"));
System.out.println("最后出现2的位置:" + list.lastIndexOf("2"));
//查找元素3所在的位置
System.out.println("最先出现3的位置:" + list.indexOf("3"));
//listIterator()遍历
System.out.println("listIterator()遍历:");
ListIterator<String> listIterator = list.listIterator();
while (listIterator.hasNext()) {
System.out.print(listIterator.next() + " ");
}
System.out.println("listIterator()遍历(部分遍历):");
ListIterator<String> listIterator1 = list.listIterator(2);
while (listIterator1.hasNext()) {
System.out.print(listIterator1.next() + " ");
}
//删除
System.out.println();
String str = list.remove(1);
System.out.println("删除的元素:" + str);
System.out.println("删除后的list集合:");
traverse(list);
//截取子集合
List<String> list01 = list.subList(2, 4); //这个区间是[ ),且右边大于或等于左边的
System.out.println("截取的子集合:");
traverse(list01);
//替换
list.set(2, "9");
System.out.println("替换后的list集合:");
traverse(list);
}
static void traverse(List<String> list) {
//遍历
System.out.println("-----集合元素如下:-----");
for (int i = 0; i < list.size(); i++) {
//集合用get方法获取,不是通过下标
System.out.print(list.get(i) + " ");
}
System.out.println();
}
}
输出结果:
添加结果:
查找结果:
迭代器遍历结果:
删除结果:
截取子集合结果:
替换结果:
4.ArrayList类
4.1clone()方法
import java.util.ArrayList;
import java.util.List;
public class CloneMethodDemo {
public static void main(String[] args) {
//clone 浅克隆
ArrayList<StringBuffer> list = new ArrayList<StringBuffer>();
StringBuffer sb = new StringBuffer("Learning,");
list.add(sb);
traverse(list);
@SuppressWarnings("unchecked")
ArrayList<StringBuffer> list01 = (ArrayList<StringBuffer>) list.clone();
traverse(list01);
//修改list中第一个元素的值
sb = list.get(0);
sb.append("ArrayList clone() method");
//遍历
traverse(list);
traverse(list01);
//add()方法 list中添加"second value"
list.add(new StringBuffer("second value"));
//遍历
traverse(list);
traverse(list01);
}
//集合遍历
static void traverse(ArrayList<StringBuffer> list) {
System.out.println("-----集合元素-----");
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i) + " ");
}
System.out.println();
}
}
输出结果:
4.2ensureCapacity()方法
code:
import java.util.ArrayList;
public class EnsureCapacityDemo {
public static void main(String[] args) {
//向集合添加100万个元素
ArrayList<String> list = new ArrayList<String>();
long start = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++) {
list.add(i + " ");
}
long end = System.currentTimeMillis();
System.out.println("耗时:" + (end - start));
ArrayList<String> list01 = new ArrayList<String>();
long start01 = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++) {
list01.add(i + " ");
}
list01.ensureCapacity(1000000);
long end01 = System.currentTimeMillis();
System.out.println("耗时:" + (end01 - start01));
}
}
输出结果:
4.3TrimToSize()方法
code:
import java.util.ArrayList;
public class TrimToSizeMethod {
public static void main(String[] args) {
//trimToSize()方法使用
ArrayList<Integer> list = new ArrayList<Integer>();
//list中添加3个元素
list.add(1);
list.add(2);
list.add(3);
list.trimToSize();
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i) + " ");
}
System.out.println();
}
}
输出结果:
5.LinkedList类
code:
import java.util.LinkedList;
public class LinkedListDemo {
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<String>();
//添加元素
list.add("1");
list.add("2");
list.add("3");
//遍历
traverse(list);
//头部 尾部
list.addFirst("0");
list.addLast("4");
traverse(list);
//输出头部元素 只是取出来,并不删除
String first = list.element();
System.out.println("头部元素:" + first);
traverse(list);
//取出头部元素和尾部元素 只是取出来,并不删除
first = list.getFirst();
String last = list.getLast();
System.out.println("头部元素:" + first + " 尾部元素:" + last);
traverse(list);
//向尾部添加元素offer()
list.offer("5");
traverse(list);
//头部 尾部元素添加 offerFirst() offerLast()
list.offerFirst("-1");
list.offerLast("6");
traverse(list);
//pollFirst() pollLast() 取出第一个/最后一个元素,并删除
first = list.pollFirst();
last = list.pollLast();
System.out.println("头部元素:" + first + " 尾部元素:" + last);
traverse(list);
//pop() 栈顶 (弹出)取出并删除
first = list.pop();
System.out.println("栈顶元素:" + first);
traverse(list);
//push() 压栈 向栈顶添加一个元素
list.push("10");
traverse(list);
//删除
first = list.removeFirst();
last = list.removeLast();
System.out.println("删除第一个元素:" + first + " 删除的最后一个元素:" + last);
traverse(list);
//添加两个重复元素 2 4
list.add(0, " 2");
list.add(2, "4");
traverse(list);
//删除第一次出现的2 删除最后一次出现的4
list.removeFirstOccurrence("2");
list.removeLastOccurrence("4");
traverse(list);
}
static void traverse(LinkedList<String> list) {
System.out.println("-----集合元素如下:-----");
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i) + " ");
}
System.out.println();
}
}
输出结果:
6.Set接口
code:
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class SetDemo {
public static void main(String[] args) {
//无序 不重复
Set<String> set = new HashSet<String>();
String s1 = "Hello";
String s2 = s1; //输出结果显示,不可重复
String s3 = "World!";
String s4 = "你好!";
set.add(s1);
set.add(s2);
set.add(s3);
set.add(s4);
//遍历,不能用for循环,没有get()方法
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()) {
System.out.print(iterator.next() + " ");
}
}
}
输出结果: