package cn.kuang.java_primary.collection;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;/**
* 1. 简单的创建两个链表, 合并在一起
*
* 2. 从第二个链表每隔一个元素删除一个元素
*
* 3. 绘制一个迭代器位置示意图
*
* Created by 框 on 2018/6/18.
*/
public class LinkedListTest {
public static void main(String[] args) {
// create linkedList a and b
List<String> a = new LinkedList<>();
a.add("tom");
a.add("bob");
a.add("amy");
List<String> b = new LinkedList<>();
b.add("Carl");
b.add("doug");
b.add("france");
b.add("eric");
System.out.println(a);
System.out.println(b);
//merge the words from b into a
ListIterator<String> aIter = a.listIterator();
Iterator<String> bIter = b.iterator();
while (bIter.hasNext()){
if (aIter.hasNext()) aIter.next();
aIter.add(bIter.next());
}
System.out.println(a);
//remove every second word from b
bIter = b.iterator();
while (bIter.hasNext()){
bIter.next();
if (bIter.hasNext()){
bIter.next();
bIter.remove();
}
}
System.out.println(b);
//bulk operation : remove all words in b from a
a.removeAll(b);
System.out.println(a);
}
}
2.3 Set的分析:
不在意元素的顺序, 可以快速查找到元素
散列表: 为每个对象调用HashCode返回一个散列码,
常用HashSet, 实现基于散列表的集
HashSet特点: 无序, 没有重复元素
示例代码:
package cn.kuang.java_primary.collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;
/**
* 1. 从System.in读取单词
*
* 2. 把他们添加到HashSet中
*
* 3. 遍历HashSet中的不同单词
*
* 4. 打印出单词数量
*
* Created by 框 on 2018/6/19.
*/publicclassSetTest {publicstaticvoidmain(String[] args) {
Set<String> words = new HashSet<>();
long totalTime = 0;
try(Scanner in = new Scanner(System.in);) {
while (in.hasNext()){
String word = in.next();
long callTime = System.currentTimeMillis();
words.add(word);
callTime = System.currentTimeMillis() - callTime;
totalTime += callTime;
}
}
Iterator<String> iter = words.iterator();
for (int i = 0; i < 20 && iter.hasNext(); i++) {
System.out.println(iter.next());
}
System.out.println("......");
System.out.println(words.size() + " distinct words. " + totalTime + " milliseconds");
}
}
TreeSet: 是一个有序的集合, 使用红黑树实现
TreeSet特点: 添加元素比HashSet慢, 但是元素有序, 任意两个元素必须是可比的
示例代码:
package cn.kuang.java_primary.collection.pojo;
import java.util.Objects;
/**
* Item 实体类
*
* Created by 框 on 2018/6/19.
*/
public classItemimplementsComparable<Item> {private String description;
private int partNumber;
/**
* 有参构造器
* @param description description
* @param partNumber partNumber
*/
public Item(String description, int partNumber) {
this.description = description;
this.partNumber = partNumber;
}
/**
* Gets of description
* @return description
*/
public String getDescription() {
return description;
}
@Override
public String toString() {
return"Item[" + "description='" + description + '\'' + ", partNumber=" + partNumber + ']';
}
@Override
public boolean equals(Object o) {
if (this == o) returntrue;
if (!(o instanceof Item)) returnfalse;
Item item = (Item) o;
if (partNumber != item.partNumber) returnfalse;
return description != null ? description.equals(item.description) : item.description == null;
}
@Override
public int hashCode() {
return Objects.hash(description, partNumber);
}
@Override
public int compareTo(Item o) {
int diff = Integer.compare(partNumber, o.partNumber);
return diff != 0 ? diff : description.compareTo(o.description);
}
}
--------------------------------------------------------------------------
package cn.kuang.java_primary.collection;
import cn.kuang.java_primary.collection.pojo.Item;
import java.util.Comparator;
import java.util.NavigableSet;
import java.util.SortedSet;
import java.util.TreeSet;
/**
* 1. 创建两个Item对象的树集
*
* 2. 第一个按照部件编号排序: Item对象的默认顺序
*
* 3. 第二个通过一个定制的比较器按照描述信息排序
*
* Created by 框 on 2018/6/19.
*/
public classTreeSetTest {
public static void main(String[] args) {
SortedSet<Item> parts = new TreeSet<>();
parts.add(new Item("Toaster", 1234));
parts.add(new Item("Widget", 4562));
parts.add(new Item("Modem", 9912));
System.out.println(parts);
NavigableSet<Item> sortByDescription = new TreeSet<>(Comparator.comparing(Item::getDescription));
sortByDescription.addAll(parts);
System.out.println(sortByDescription);
}
}
3. 映射/字典
3.1 基本映射操作
Java类库提供了两个通用的实现: HashMap和TreeMap,
HashMap对键进行散列, TreeMap用键的整体顺序对元素进行排序
使用HashMap: 不需要按照排列顺序访问键
示例代码:
package cn.kuang.java_primary.collection.pojo;
/**
* Employee实体类
* Created by 框 on 2018/6/19.
*/publicclassEmployee {private String name;
public String getName() {
return name;
}
publicvoidsetName(String name) {
this.name = name;
}
@Overridepublic String toString() {
return name ;
}
publicEmployee() {
}
publicEmployee(String name) {
this.name = name;
}
}
---------------------------------------------------------
package cn.kuang.java_primary.collection;
import cn.kuang.java_primary.collection.pojo.Employee;
import java.util.HashMap;
import java.util.Map;
/**
* 1. 展示映射的操作过程
*
* 2. 将键值对添加到映射中
*
* 3. 删除一个键, 对应的值也会删除
*
* 4. 修改和查看某个值
*
* Created by 框 on 2018/6/19.
*/publicclassMapTest {publicstaticvoidmain(String[] args) {
Map<String, Employee> staff = new HashMap<>();
staff.put("114-25-5412", new Employee("Amy qw"));
staff.put("114-25-3234", new Employee("RQs dfg"));
staff.put("114-25-5818", new Employee("EAQ aas"));
staff.put("114-25-9172", new Employee("Asd asd"));
//print staff
System.out.println(staff);
//remove an entity by key
staff.remove("114-25-9172");
//replace an entity
staff.put("114-25-3234", new Employee("Alice"));
//get entity by key
System.out.println(staff.get("114-25-5818"));
//iterate through all entities
staff.forEach(
(k, v) -> System.out.println("key: " + k + " , value = " + v)
);
}
}
3.2 Map常用方法
V get();
dafault V getOrDefault(Object key, V defaultValue);