Java集合使用

以前一直覺得自己集合使用的很溜,看一下api及其實現才發現原來自己很多東西都不會,或者很多東西都想當然了,看來還是做一下筆記,再重新溫故一下。

集合主要分爲兩大類,Collection和Map,Collection的主要子類有Set,List。List的主要子類有Vector,ArrayList,LinkedList。Map的主要子類有HashMap,TreeMap,LinkedHashMap,HaspTable。其中平常普通開發中使用最多的應該是ArrayList ,Vector,HashMap,HashTable;現在說說他們的區別:

1、ArratList:是有序的,其實現就是封裝了一個數組,因爲其方法和屬性都沒加同步鎖sychronized,所以不適合併發環境,是線程不安全的;適合做查詢操作。

2、Vector:跟ArrayList一樣是有序的,底層實現就是分裝了一個數組;但是它的方法加了同步鎖sychronized,所以是線程安全的;但是性能比ArratList低

3、HashMap:存儲鍵值對,並且是無序的;方法沒加同步鎖,是線程不安全的。

4、HashTable:存儲鍵值對,並且是無序;;方法加了同步鎖,是線程安全的,但是效率低些。

上面只是一些基礎的東西,相信很多人都會下面來看一些實例:

1、ArrayList的使用:

(1)首先說說ArrayList的添加方法add

add(Object obj)——往集合最後面一個元素後面添加,下面是ArrayList中的實現

 public boolean add(Object obj)
    {
        ensureCapacity(size + 1);
        elementData[size++] = obj;
        return true;
    }
add(int i, Object obj)——將指定元素插入此列表中的指定位置,向右移動當前位於該位置的元素(如果有)以及所有後續元素(將其索引加 1),其實現:

public void add(int i, Object obj)
    {
        if(i > size || i < 0)
        {
            throw new IndexOutOfBoundsException((new StringBuilder()).append("Index: ").append(i).append(", Size: ").append(size).toString());
        } else
        {
            ensureCapacity(size + 1);
            System.arraycopy(((Object) (elementData)), i, ((Object) (elementData)), i + 1, size - i);
            elementData[i] = obj;
            size++;
            return;
        }
    }
set(int i, Object obj)——用指定的元素替代此列表中指定位置上的元素,其實現:

public Object set(int i, Object obj)
    {
        RangeCheck(i);
        Object obj1 = elementData[i];
        elementData[i] = obj;
        return obj1;
    }
remove(int i)——移除此列表中指定位置上的元素。向左移動所有後續元素(將其索引減 1),實現:

 public Object remove(int i)
    {
        RangeCheck(i);
        modCount++;
        Object obj = elementData[i];
        int j = size - i - 1;
        if(j > 0)
            System.arraycopy(((Object) (elementData)), i + 1, ((Object) (elementData)), i, j);
        elementData[--size] = null;
        return obj;
    }
remove(Object obj)——移除此列表中首次出現的指定元素(如果存在)。如果列表不包含此元素,則列表不做改動,其內部實現:
 public boolean remove(Object obj)
    {
        if(obj == null)
        {
            for(int i = 0; i < size; i++)
                if(elementData[i] == null)
                {
                    fastRemove(i);
                    return true;
                }

        } else
        {
            for(int j = 0; j < size; j++)
                if(obj.equals(elementData[j]))
                {
                    fastRemove(j);
                    return true;
                }

        }
        return false;
    }

    private void fastRemove(int i)
    {
        modCount++;
        int j = size - i - 1;
        if(j > 0)
            System.arraycopy(((Object) (elementData)), i + 1, ((Object) (elementData)), i, j);
        elementData[--size] = null;
    }
addAll(Collection collection)——按照指定 collection 的迭代器所返回的元素順序,將該 collection 中的所有元素添加到此列表的尾部,內部實現:

 public boolean addAll(Collection collection)
    {
        Object aobj[] = collection.toArray();
        int i = aobj.length;
        ensureCapacity(size + i);
        System.arraycopy(((Object) (aobj)), 0, ((Object) (elementData)), size, i);
        size += i;
        return i != 0;
    }

示例:

ublic class TestList {
	
	public static void main(String[] args) {
		
		//順序結構ArrayList的使用,ArrayList是有序的,類似數組
		List<String> list=new ArrayList<String>();
		list.add("11");
		list.add("22");
		list.add("33");
		list.add("44");
		list.add("55");//將指定的元素添加到此列表的尾部。
		
		for (int i = 0; i < list.size(); i++) {
			System.out.println(list.get(i));
		}
		
		System.out.println("------------------------------------------------");
		//ArrayList的實現就是數組
		Object[] arrays=(Object[])list.toArray();
		for (int i = 0; i < arrays.length; i++) {
			System.out.println(arrays[i]);
		}
		System.out.println("-------------------------------------------------");
		String str1=list.set(1, "二貨");//ArrayList改變某個索引下的值是,返回原來的值
		System.out.println(str1);
		System.out.println("-----------------------------------------------");
		for (int i = 0; i < list.size(); i++) {
			System.out.println(list.get(i));
		}
		
		System.out.println("--------------------------------------");
		list.set(1, str1);//用指定的元素替代此列表中指定位置上的元素
		list.add(0, "00");//將指定元素插入此列表中的指定位置,向右移動當前位於該位置的元素(如果有)以及所有後續元素(將其索引加 1)
		for (int i = 0; i < list.size(); i++) {
			System.out.println(list.get(i));
		}
		
		System.out.println("-----------------------------------");
		list.remove(0);
		for (int i = 0; i < list.size(); i++) {
			System.out.println(list.get(i));
		}
		System.out.println("------------------------------------");
		list.remove("55");//移除此列表中首次出現的指定元素(如果存在)。如果列表不包含此元素,則列表不做改動
		for (int i = 0; i < list.size(); i++) {
			System.out.println(list.get(i));
		}
		System.out.println("-------------------------------");
	
		List<String> list2=new ArrayList<String>();
		list2.add("66");
		list2.add("77");
		list2.add("88");
		
		list.addAll(list2);//照指定 collection 的迭代器所返回的元素順序,將該 collection 中的所有元素添加到此列表的尾部
		for (int i = 0; i < list.size(); i++) {
			System.out.println(list.get(i));
		}
		System.out.println("是否包含“33”:"+list.contains("33"));
		System.out.println("元素\"66\"的索引:"+list.indexOf("66"));
		
		list.clear();
		System.out.println(list.size());
		
	}
	
	

}

2、Map的使用,Map的常用遍歷方式:

public class TestMap {
	
	public static void main(String[] args) {
		
		Map<String,Object> map=new HashMap<String, Object>();
		map.put("1", "zhangsan");
		map.put("2", "lisi");
		map.put("3", "wangwu");
		map.put("4", "zhaoliu");
		map.put("5", "tianqi");
		
		//map的遍歷方法1
		for(String key:map.keySet()){
			String value=(String)map.get(key);
			System.out.println("key:"+key+"----"+"value:"+value);
		}
		
		System.out.println("--------------------------------------");
		//map的遍歷方法2
		Iterator ita=map.entrySet().iterator();
		while(ita.hasNext()){
			Entry<String, Object> entry=(Entry<String, Object>)ita.next();
			System.out.println("key:"+entry.getKey()+"----"+"value:"+entry.getValue());
			
		}
		
		System.out.println("--------------------------------------");
		//Map的值遍歷
		map.values();
		for(Object objValue:map.values()){
			System.out.println("values:"+objValue);
		}
	}

}





發佈了71 篇原創文章 · 獲贊 12 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章