Java个个人学习笔记08集合框架
Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。Collection 接口又有 3 种子类型,List、Set 和 Queue。
所有集合框架里面的元素都应该是对象,如果需要用非引用类型需要转化成对应的构造器
ArrayList
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CAINmDrq-1637550841550)(ArrayList.png)]
import java.util.ArrayList; // 引入 ArrayList 类
ArrayList<E> objectName =new ArrayList<>(); // 初始化
添加元素到 ArrayList 可以使用 add() 方法
访问 ArrayList 中的元素可以使用 get() 方法
修改 ArrayList 中的元素可以使用 set() 方法
删除 ArrayList 中的元素可以使用 remove() 方法
ArrayList 中的元素数量可以使用 size() 方法
使用 for-each 来迭代:
ArrayList<String> sites = new ArrayList<String>();
for (String i : sites) {
System.out.println(i);
}
ArrayList 排序:Collections位于 java.util 包中,提供的 sort() 方法可以对字符或数字列表进行排序。
ArrayList<String> sites = new ArrayList<String>();
Collections.sort(sites); // 字母排序
for (String i : sites) {
System.out.println(i);
}
Java LinkedList
链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的地址。
以下情况使用 ArrayList :
- 频繁访问列表中的某一个元素。
- 只需要在列表末尾进行添加和删除元素操作。
以下情况使用 LinkedList :
-
你需要通过循环迭代来访问列表中的某些元素。
-
需要频繁的在列表开头、中间、末尾等位置进行添加和删除元素操作。
/ 引入 LinkedList 类 import java.util.LinkedList; LinkedList<E> list = new LinkedList<E>(); // 普通创建方法 LinkedList<E> list = new LinkedList(Collection<? extends E> c); // 使用集合创建链表
增删改查方法同ArrayList
Java HashMap
HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。
HashMap 实现了 Map 接口,根据键的 HashCode 值存储数据,具有很快的访问速度,最多允许一条记录的键为 null,不支持线程同步。
import java.util.HashMap; // 引入 HashMap 类
HashMap<Integer, String> Sites = new HashMap<Integer, String>();
访问元素
我们可以使用 get(key) 方法来获取 key 对应的 value
删除元素
我们可以使用 remove(key) 方法来删除 key 对应的键值对(key-value)
计算大小
如果要计算 HashMap 中的元素数量可以使用 size() 方法
迭代 HashMap:
import java.util.HashMap;
public class RunoobTest {
public static void main(String[] args) {
// 创建 HashMap 对象 Sites
HashMap<Integer, String> Sites = new HashMap<Integer, String>();
// 添加键值对
Sites.put(1, "Google");
Sites.put(2, "Runoob");
Sites.put(3, "Taobao");
Sites.put(4, "Zhihu");
// 输出 key 和 value
for (Integer i : Sites.keySet()) {
System.out.println("key: " + i + " value: " + Sites.get(i));
}
// 返回所有 value 值
for(String value: Sites.values()) {
// 输出每一个value
System.out.print(value + ", ");
}
}
}
Java HashSet
HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合。
import java.util.HashSet; // 引入 HashSet 类
HashSet<String> sites = new HashSet<String>();
添加元素
HashSet 类提供类很多有用的方法,添加元素可以使用 add() 方法:
判断元素是否存在
我们可以使用 contains() 方法来判断元素是否存在于集合当中
删除元素
我们可以使用 remove() 方法来删除集合中的元素
Java Iterator(迭代器)
Java Iterator(迭代器)不是一个集合,它是一种用于访问集合的方法,可用于迭代 ArrayList ,HashMap等集合
import java.util.ArrayList;
import java.util.Iterator;
ArrayList<String> sites = new ArrayList<String>();
// 获取迭代器
Iterator<String> it = sites.iterator();
// 输出集合中的第一个元素
System.out.println(it.next());
循环:
while(it.hasNext()) {
System.out.println(it.next());
}
forEach循环就是为了让用iterator循环访问的形式简单(对集合框架的for-each也是由iterator实现),写起来更方便。但如有删除操作,还是要用iterator,for循环中调用remove会导致下标错误
比较自己构造的类的两种方式:
import java.util.*;
public class Main {
static class complex {
int a = 0;
int b = 0;
public complex(int a, int b) {
this.a = a;
this.b = b;
}
}
//继承Comparable接口实现比较
static class complex2 implements Comparable {
int a = 0;
int b = 0;
public complex2(int a, int b) {
this.a = a;
this.b = b;
}
@Override
public int compareTo(Object o) {
complex2 c2 = (complex2)o;
return this.a - c2.a;
}
}
//写一个构造器compa实现比较
static class compa implements Comparator<complex>{
@Override
public int compare(complex o1, complex o2) {
return o1.a > o2.a ? 1 : -1;
}
}
public static void main(String[] args) {
complex complex1 = new complex(3,-2);
complex complex2 = new complex(2,-1);
ArrayList<complex> arrayListc = new ArrayList();
arrayListc.add(complex1);
arrayListc.add(complex2);
Collections.sort(arrayListc,new compa());
complex2 complex3 = new complex2(5,-2);
complex2 complex4 = new complex2(4,-1);
ArrayList<complex2> arrayListc2 = new ArrayList();
arrayListc2.add(complex3);
arrayListc2.add(complex4);
Collections.sort(arrayListc2);
for (complex a:arrayListc
) {
System.out.println(a.a+" "+a.b);
}
for (complex2 a:arrayListc2
) {
System.out.println(a.a+" "+a.b);
}
}
}