集合
集合種類
List<String> list = new ArrayList<>(data);
Set<String> set1 = new HashSet<>(data); // 值不重復
SortedSet<String> set2 = new TreeSet<>(data); // 值有序並且不重復
Set<String> set3 = new LinkedHashSet<>(data); // 值順序固定並且不重復
Map<String, Object> map1 = new HashMap<>(map);
SortedMap<String, Object> map2 = new TreeMap<>(map);
ArrayList
聲明
ArrayList是順序表,增刪慢,查詢快,有序可重復集合
只能用來存儲自定義應用類型和包裝類型 Byte Short Integer Long Float Double Character Boolean
List list = new ArrayList();
List<String> list = new ArrayList<String>();
List<String> list = new ArrayList<>();
ArrayList<Integer> arr = new ArrayList<Integer>();
增刪改查元素
List<Integer> list = new ArrayList<Integer>();
List<Integer> list1 = new ArrayList<Integer>();
list.add(1);
list1.add(2);
list.addAll(list1);
list.add(11);
list.add(1, 33);
list.set(0, 33);
list.remove(0);
list.clear();
list.get(0)
list.size()
遍歷幾種方式
第一種
List<String> list = new ArrayList<>(Arrays.asList("a", "b", "c"));
list.forEach(System.out::println);
第二種
list.parallelStream().forEach(System.out::println);
第三種
for (String item : list) {
System.out.println(item);
}
第四種
ListIterator<String> iterator = list.listIterator();
while(iterator.hasNext()) {
System.out.println(iterator.next());
}
空集合
List<String> anEmptyList = Collections.emptyList();
Map<Integer, Date> anEmptyMap = Collections.emptyMap();
Set<Number> anEmptySet = Collections.emptySet();
子集合
List<String> list = new ArrayList<>(Arrays.asList("a", "b", "c"));
List<String> list1 = list.subList(0,2); // [a, b]
不可變集合
List<String> list = new ArrayList<>(Arrays.asList("a", "b", "c"));
List<String> list1 = Collections.unmodifiableList(list); // 不能修改值
List<String> unmodifiableList = Collections.singletonList("Only string in the list"); // 只有一個元素的不可變集合
LinkedList
鏈表,增刪快,查詢慢
LinkedList<String> arr = new LinkedList<String>();
arr.add("a");
arr.addLast("c");
arr.addFirst("b");
arr.getFirst();
arr.getLast();
arr.removeFirst();
arr.removeLast();
arr.clear();
Lists
排序
方式一,實現Comparable接口
public class User implements Comparable<User> {
private Integer id;
private String name;
public User(Integer id, String name) {
this.id = id;
this.name = name;
}
@Override
public int compareTo(User u) {
return id.compareTo(u.id);
}
public void setId(Integer id) {
this.id = id;
}
public Integer getId() {
return id;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
List<User> users = new ArrayList<User>();
users.add(new User(1, "小李"));
users.add(new User(2, "小紅"));
Collections.sort(users);
第二種,傳遞Comparator接口實現
Collections.sort(users, new Comparator<User>() {
@Override
public int compare(User s, User e){
return s.getId().compareTo(e.getId());
}
});
第三種,lambda表達式
Collections.sort(users, (s, e) -> s.getId().compareTo(e.getId()));
第四種,實現類sort
users.sort((s, e) -> s.getId().compareTo(e.getId()));
類型轉換
List<Integer> nums = Arrays.asList(1, 2, 3);
List<String> strings = nums.stream().map(Object::toString).collect(Collectors.toList());
取交集
List<Integer> list1 = new ArrayList<>();
List<Integer> list2 = new ArrayList<>();
list1.addAll(Arrays.asList(new Integer[]{1,2,3}));
list2.addAll(Arrays.asList(new Integer[]{1,2,4}));
list1.retainAll(list2);
移動元素
Collections.reverse(list); // 反轉
Collections.rotate(list1, 1); // 集合元素整體循環后移一位
Collections.shuffle(list1); // 重排元素
Random random = new Random(12);
Collections.shuffle(list1, random); // 隨機重排,只會隨機一次
刪除交集元素
List<Integer> list1 = new ArrayList<>();
List<Integer> list2 = new ArrayList<>();
list1.addAll(Arrays.asList(new Integer[]{1,2,3}));
list2.addAll(Arrays.asList(new Integer[]{1,2,4}));
list1.removeAll(list2); // [3]
Sets
集合特點
Hash集合底層數據結構是散列表,所以要求元素必須不重復,避免地址對應沖突
Hash集合訪問的直接是數據地址,查詢元素最快,增刪元素也快
HashSet集合處理地址沖突的方法使用開放定址法
HashSet是無序無重復元素集合,使用方法和ArrayList類似
LinkedHashSet集合處理地址沖突的方法使用鏈地址法
Set<T> set = new HashSet<T>(); // 快速定位,隨機排序
TreeSet<T> sortedSet = new TreeSet<T>(); // 按照compareTo排序,操作慢
LinkedHashSet<T> linkedhashset = new LinkedHashSet<T>(); // 快速定位,按照插入順序排序,備份慢
常用方法
set.add(12);
set.clear();
set.contains(0);
set.isEmpty();
set.remove(0);
set.size();
根據set創建list
Set<String> set = new HashSet<String>();
set.add("a");
set.add("b");
方式一
List<String> list = new ArrayList<String>();
list.addAll(set);
方式二
List<String> list = set.stream().collect(Collectors.toList());
結語
本文章是java成神的系列文章之一
如果你想知道,但是本文沒有的,請下方留言
我會第一時間總結出來並發布填充到本文