面试常问--ArraryList
1. ArraryList底层的数据结构
1.1 排序
- 使用Collections.sort的排序
-
@Test public void arraryListSort(){ List<User> stus = new ArrayList<User>(); User stu1 = new User(); User stu2 = new User(); User stu3 = new User(); stu1.setName("张三"); stu1.setAge(30); stu2.setName("李四"); stu2.setAge(20); stu3.setName("王五"); stu3.setAge(60); stus.add(stu1); stus.add(stu2); stus.add(stu3); //对users按年龄进行排序 Collections.sort(stus, new Comparator<User>() { @Override public int compare(User o1, User o2) { // 升序 return o1.getAge()-o2.getAge(); // 降序 // return o2.getAge()-o1.getAge(); } }); // 输出结果
- 使用ArrayList自带的sort()
-
ArrayList arrayList = new ArrayList(); int[] arr = new int[] { 1, 9, 3, 6, 5, 4, 7, 8,2}; arrayList.AddRange(arr); arrayList.Sort(); //结果输出结果:123456789
1.2 去重
//1.循环list中所有的元素然后删除 public static ArrayList removeDuplicate_1(ArrayList list){ for(int i =0;i<list.size()-1;i++){ for(int j=list.size()-1;j>i;j--){ if(list.get(i).equals(list.get(j))) list.remove(j); } } return list; } //2.利用hashSet剔除重复元素,但是是无序的 public static ArrayList removeDuplicate_2(ArrayList list){ HashSet set = new HashSet(list); //使用LinkedHashSet可以保证输入的顺序 //LinkedHashSet<String> set2 = new LinkedHashSet<String>(list); list.clear(); list.addAll(set); return list; } //3.利用list的contains方法去重 public static ArrayList removeDuplicate_3(ArrayList list){ ArrayList tempList = new ArrayList(list.size()); for(int i=0;i<list.size();i++){ if(!tempList.contains(list.get(i))) tempList.add(list.get(i)); } return tempList; }
1.3 扩容
ArrayList默认构造的容量为10,没错。 因为ArrayList的底层是由一个Object[]数组构成的,而这个Object[]数组,默认的长度是10,所以有的文章会说ArrayList长度容量为10。
随着向ArrayList中不断添加元素,其容量也自动增长。

浙公网安备 33010602011771号