面试常问--ArraryList

1. ArraryList底层的数据结构

 1.1 排序

  1. 使用Collections.sort的排序
  2.  @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();
                }
            });
            // 输出结果
  3. 使用ArrayList自带的sort()
  4. 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中不断添加元素,其容量也自动增长。

 

posted @ 2021-09-27 17:04  火辣小野猫  阅读(56)  评论(0)    收藏  举报