Java 提供集合框架,是一个包含一系列实作可重复使用集合的数据结构的类别和界面集合。
集合可分为三种:
接口定义规则方法
实现接口的类必须遵守规则
【Java 学习笔记】Java 思维—List 接口与 ArrayList 实现类
迭代是重复反馈过程的活动,目的是接近并达到某些目标。
public class FlemingIterator {
@Test
public void test {
ArrayList<String> arrayList = new ArrayList<>();
arrayList.add("Fleming")
arrayList.add("Tom")
arrayList.add("Jack")
arrayList.add("Rose")
arrayList.add("Lili")
}
}
for(int i = 0; i < arrayList.size(); i ++) {
arrayList.remove("Jack");
}
// 出现java.util.ConcurrentModificationException异常
for (String e : arrayList) {
arrayList.remove(e);
}
ArrayList 中删除数据时不能使用 forEach,可以使用迭代器
Iterator<String> iterator = arrayList.iterator();
while (iterator.hasNext()) {
String value = iterator.next();
if (value.equals(Rose)) {
arrayList.remove(value);
}
}
若有嵌套循环时,不使用迭代器,使用 forEach
public class FlemingIterator {
@Test
public void test1 {
LinkedList<Integer> linkedList_1 = new LinkedList<>();
linkedList_1.add(1)
linkedList_1.add(2)
linkedList_1.add(3)
}
public void test2 {
LinkedList<Integer> linkedList_2 = new LinkedList<>();
linkedList_2.add(4)
linkedList_2.add(5)
linkedList_2.add(6)
}
}
// 出现java.util.NoSuchElementException异常
for (Iterator<Integer> integer_1 = linkedList_1.iterator(); iterator_1.hasNext();) {
for (Iterator<Integer> integer_2 = linkedList_2.iterator(); integer_2.hasNext;) {
if (iterator_1.next() < iterator_2.next()) {
System.out.println(iterator_1.next());
}
}
}
// 出现java.util.NoSuchElementException异常
for (Integer value_1 : linkedList_1) {
for (Integer value_2 : linkedList_2) {
if (value_1 < value_2) {
System.out.println(value_1);
}
}
}
增强 for 循环是一个小型,隐性的迭代器
Set 集合无序,且不允许出现重复元素
@Test
public void test1() {
HashSet<String> hashSet = new HashSet<>();
hashSet.add("Fleming");
hashSet.add("Tom");
hashSet.add("Rose");
hashSet.add("Rose");
System.out.println(hashSet);
// 输出Tom,Rose,Fleming,无序且不重复
}
Hash 哈希 单项散列函数
JDK1.8 以前,Hash 表底层是数组和链表
JDK1.8 以后,Hash 表底层是数组、链表和红黑树
有序,元素不重复元素
@Test
public void test1() {
LinkedHashSet<String> linkedHashSet = new LinkedHashSet<>();
linkedHashSet.add("1");
linkedHashSet.add("2");
linkedHashSet.add("3");
linkedHashSet.add("4");
linkedHashSet.add("4");
System.out.println(linkedHashSet);
// 输出1,2,3,4,有序且不重复
}
HashMap 属于 AbstractMap
@Test
public void test1() {
// key, value
HashMap<Integer,String> hashMap = new HashMap<>();
hashMap.put(100000,"Fleming");
hashMap.put(100001,"Tom");
hashMap.put(100002,"Rose");
System.out.println(hashMap);
// 输出100001=Tom,100000=Frank,100002=Rose
String value = hashMap.get(100002);
System.out.println(value);
// 输出Rose
System.out.println(hashMap.containsKey(100000));
// 包含指定的Key则返回true
System.out.println(hashMap.containsValue(Fleming));
// 包含指定的Value则返回true
hashMap.replace(100000,"Change");
System.out.println(hashMap);
// 输出100001=Tom,100000=Change,100002=Rose
}
@Test
public void test2() {
// key, value
HashMap<Integer,String> hashMap = new HashMap<>();
hashMap.put(100000,"Fleming");
hashMap.put(100001,"Tom");
hashMap.put(100002,"Rose");
Set<Integer> Keys = hashMap.keySet();
System.out.println(keys);
// 输出100001,100000,100002
// 将key保存为set
Set<Entry<Integer,String>> entrySet = hashMap.entrySet();
System.out.println(entrySet);
// 输出100001=Tom,100000=Fleming,100002=Rose
// 将键值对保存为set
}
@Test
public void test1() {
// key, value
HashMap<Integer,String> hashMap = new HashMap<>();
hashMap.put(100000,"Fleming");
hashMap.put(100001,"Tom");
hashMap.put(100002,"Rose");
hashMap.put(100001,"Change");
System.out.println(hashMap);
// key已经存在,编译虽然能够通过,但覆盖是危险的
System.out.println(hashMap.get(100005));
// 返回null
}
@Test
public void test1() {
// key, value
HashMap<Integer,Double> hashMap = new HashMap<>();
hashMap.put(100000,"98.8");
hashMap.put(100001,"56.5");
hashMap.put(100002,"32.3");
Set<Integer> keys = hashMap.keySet();
ArrayList<Integer> arrayList = new ArrayList<>();
Set<Entry<Integer,Double>> entrySet = hashMap.entrySet();
System.out.println(entrySet);
Iterator<Entry<Integer,Double>> iterator = entrySet.iterator();
while (Integer.hasNext()) {
int value = Integer.next().getValue();
if (value >= 90) {
arrayList.add(value);
}
}
System.out.println(arrayList);
}