数组:


优点:在内存中时连续的,速度较快,操作简单。


 


缺点:定义数组时要定义其长度,不是很灵活,过长过短都会造成问题。不方便进行数据的添加、插入和移除


 


 


数组在什么时候会用到呢?


 


1、java ArrayList无法存储基本类型,int,long,如果保存的话,就需要封装为Integer、Long,而自动的拆装箱,也有性能的消耗,所以总结下这点就是说如果要保存基本类型,同时还特别关注性能,就可以使用数组。


 


2、如果对数据的数量大小已知,操作也非常简单,也不需要ArrayList中的大部分方法,也是可以直接使用数组的。


 


ArrayList:


优点:大小是动态扩充与收缩的。在声明ArrayList对象时不需要指定它的长度。ArrayList继承了List接口,可以很方便的进行数据的添加、插入和移除.


 


缺点:当向集合插入不同类型的数据后(ArrayList将数据当作object存储),在进行数据处理时容易出现类型不匹配的错误,使用时需要进行类型转换处理,存在装箱与拆箱操作,造成性能大量损耗的现象。


 


有三种初始化方式:


1.默认的构造器,将会以默认的大小来初始化内部的数组


2. 用一个Collection对象来构造,并将该集合的元素添加到ArrayList


3. 用指定的大小来初始化内部的数组


 


默认是一个常量值为EMPTY ARRAY的长度为0的数组,只有在add()的时候,才会扩容到10,如果数组长度不够了,底层自己会根据capacity的1.5倍进行扩容,10->15->22


 


ArrayList去重:


 


package com.xiaozhao.juc;


import java.util.ArrayList;
import java.util.HashSet;


public class ListDemo{
    public static void main(String[] args) {
        ArrayList list = new ArrayList();
        list.add("aaa");
        list.add("aaa");
        list.add("bbb");
        list.add("bbb");
        list.add("ccc");
        list.add("ccc");
        list.add("ccc");
        System.out.println(list);
        //双重循环去重
       System.out.println( removeDuplicate2(list));
        
    }
    
    //1.循环list中所有的元素然后删除
    public static ArrayList removeDuplicate1(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 removeDuplicate2(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 removeDuplicate3(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;        
    }
}