ArrayList的去重、排序以及其他应用
介紹了ArrayList集合去重的三種方式,以及排序的兩種方式,以及反射獲取ArrayList的容量,以及Array和ArrayList的區別。
文章目錄
- 1 Array和ArrayList的區別以及使用條件
- 2 List去重
- 2.1 借助輔助集合
- 2.2 利用迭代器
- 2.3 利用java8的lambda
- 3 List排序
- 4 反射獲取ArrayList的容量
- 5 迭代器和for循環速度測試
1 Array和ArrayList的區別以及使用條件
Array 和 ArrayList都是存放數據的容器.array是代表的是數組,arraylist是一個集合,arraylist底層使用的封裝了一個object數組。它的可變就是數組擴容。
區別:
使用條件:
2 List去重
2.1 借助輔助集合
借助輔助集合
ArrayList<String> al = new ArrayList<String>(); al.add("aa"); al.add("bb"); al.add("aa"); al.add("dd"); al.add("dd"); al.add("dd"); al.add(null); al.add("ee"); al.add("ee"); //去重思路一 借助輔助集合 ArrayList<String> al2 = new ArrayList<String>(); for (String s : al) {if (!al2.contains(s)){al2.add(s);} } al.clear(); al.addAll(al2); System.out.println(al); //[aa, bb, dd, null, ee]2.2 利用迭代器
直接利用列表迭代器,無需借助輔助集合(打亂順序)
ListIterator<String> sli = al.listIterator(); while (sli.hasNext()) {String next = sli.next(); //獲得下一個元素sli.remove(); //移除獲得的元素if (!al.contains(next)) //判斷源集合是否包含被移除的元素{sli.add(next); //沒包含就再添加進來} } System.out.println(al);注意: contains(obj); remove(Object obj);
以上兩個方法底層是依據equals方法:根據equals方法返回的值,判斷是否移除/或者是判斷是否存在。因此對對象去重時,需要重寫equals方法,使得equals比較的是具體值而不是地址。
2.3 利用java8的lambda
使用Java8的lambda表達式輕松實現集合去重
al = al.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(HashSet::new), ArrayList::new)); System.out.println(al);3 List排序
Clooections的sort方法快速實現排序:
public static <T extends Comparable<? super T>> void sort(List list) --自然排序
public static void sort(List list,Comparator<? super T> c) --自定義排序
4 反射獲取ArrayList的容量
明顯我們無法直接通過可用方法獲取ArrayList的容量,因此只有使用反射獲取:
// 獲取list容量 public static Integer getCapacity(ArrayList list) {Integer length = null;Class clazz = list.getClass();Field field;try {field = clazz.getDeclaredField("elementData");field.setAccessible(true);Object[] object = (Object[]) field.get(list);length = object.length;return length;} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}return length; }5 迭代器和for循環速度測試
一般來說,for循環速度更快。
public class ArrayListTest {static List<Integer> list = new ArrayList<Integer>();static {for (int i = 1; i <= 100000000; i++) {list.add(i);}}public static long arrayFor() {//開始時間long startTime = System.currentTimeMillis();for (int j = 0; j < list.size(); j++) {Object num = list.get(j);}//結束時間long endTime = System.currentTimeMillis();//返回所用時間return endTime - startTime;}public static long arrayIterator() {long startTime = System.currentTimeMillis();Iterator iterator = list.iterator();while (iterator.hasNext()) {Object next = iterator.next();}long endTime = System.currentTimeMillis();return endTime - startTime;}public static void main(String[] args) {long time1 = arrayFor();long time2 = arrayIterator();System.out.println("ArrayList for循環所用時間==" + time1);System.out.println("ArrayList 迭代器所用時間==" + time2);} }如果有什么不懂或者需要交流,可以留言。另外希望點贊、收藏、關注,我將不間斷更新各種Java學習博客!
總結
以上是生活随笔為你收集整理的ArrayList的去重、排序以及其他应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机与产品维修专业,计算机与数码产品维
- 下一篇: 自己动手写php web server