java基础【2】(集合)

来源:互联网 发布:查询父级部门 mysql 编辑:程序博客网 时间:2024/06/06 09:57

单列集合的顶层接口是java.util.Collection

将集合转成数组的方法是toArray()

 

线程不安全===线程不同步

 

遍历的方法有迭代(有并发问题,List会出现异常,Set不会出现异常(List可以用迭代器添加)),for循环加sizeget方法(无并发问题),还有增强for循环(有并发问题,都会出现异常)输出为[T1,T2,…]

 

List:存储的对象是有序的(集合中对象的顺序和添加对象的顺序是一致的),可以重复的,元素可以有多个null

 

ArrayList:底层使用的数据结构是数组,线程不安全的(不是线程同步的,可以多个线程来对其进行操作),查找速度快,增删速度慢,初始容量为10

LinkedList:底层使用的数据结构是链表,线程不安全的,查找速度慢,增删速度快

Vector:底层使用的数据结构是数组,线程安全的,查找速度快,增删速度慢,(可以用枚举来遍历$Vector.elements(),且没有并发问题)


Set:元素是无序,元素不可以重复((地址相同||equals()方法相等)&&hashCode()的值相等的两个元素重复)(元素重复时不报错,但不会存入),元素最多有一个可以为null

        HashSet:无序的,线程不安全的,

                   LinkedHashSet:有序性,线程不安全的

TreeSet:线程不安全的,自然排序,元素不可以为null(利用CompareTo()方法(升序排序))

存储到TreeSet集合中的对象必须实现Comparable接口

 

 

List:特有方法,可以操作下标,有特定的迭代器ListIterator(有add方法,不会出现并发问题,可以边迭代边添加,添加完成后迭代器并不会立刻输出)

增:

void add(intindex, E element)

booleanaddAll(int index, Collection<? extends E> c)

E remove(int index)

E set(int index, E element)

 ListIterator<E> listIterator()

 返回此列表元素的列表迭代器(按适当顺序)。

 ListIterator<E> listIterator(int index)

 List<E> subList(int fromIndex, inttoIndex)

 E get(int index)

intindexOf(obj):获取指定元素的位置。

 

LinkedList特有的方法:

addFirst()

addLast()

getFirst()//获取的对象不存在会发生异常

getLast()

removeFirst()//删除的对象不存在会发生异常

removeLast()

从jdk1.6开始出现以下方法

offerFirst()

offerLast()

peekFirst()//获取的对象不存在会返回null

peekLast()

pollFirst()//删除的对象不存在会返回null

pollLast()

 

自定义泛型的类名不用加<T>

 

可变参数

 public static int add(int ... p){

         int sum = 0;

         for(int i=0;i<p.length;i++){

                   sum+=p[i];

         }

         return sum;

}

 

Arrays工具类

Arrays.toString(Object[] a) (String类型)

Arrays.sort()  (升序排序void)

Arrays.hashCode(Object[]a) (int类型)

Arrays.fill(Object[]a, Object val) (void类型)

Arrays.equals(Object[] a, Object[] a2)   (boolean类型)

Arrays.binarySearch(short[] a, short key)    (二分法查找索引int类型)

Arrays.asList(T... a)   (  返回一个受指定数组支持的固定大小的列表。List<T>不能改变长度(添加或删除))

Arrays. copyOf(T[]original, int newLength)  (返回newLength长度的T数组,复制源数组的值)

 

集合工具类Collections

Collections.reverse(List<?>list)   (反转指定列表中元素的顺序void类型)

Collections.shuffle(List<?>list, Random rnd)   (洗牌void类型)

Collections.sort(List<T>list)    (根据自然顺序排序)

Collections.synchronizedList(List<T>list)    返回指定列表支持的同步(线程安全的)列表。

 

Map<K,V>:键key不能重复,最多有一个null,值value可以重复,可以有多个null,输出为{key1=value1,key2=value2,…},(K常为String

 

遍历:

Set<K> set=map.keySet();

for(K key : set){

         Vvalue=map.get(key);

         System.out.println(value);

}

 

Set<Entry<String,String>> entry = map.entrySet();

                   for(Entry<String,String> ss : entry){

                            System.out.println("键:"+ss.getKey()+"值:"+ss.getValue());

                   }

HashMap:无序的,线程不安全的(不同步的)

TreeMap:根据键值的自然顺序排序,key不可以为null线程不安全的(不同步的)

Hashtable:无序的,线程同步的(安全的),keyvalue均不能为null

LinkedHashMap:有顺序(添加的顺序),不是线程安全的(不同步的)

Map方法:

boolean containsKey(Object key)   如果此映射包含指定键的映射关系,则返回 true

boolean containsValue(Objectvalue)  如果此映射将一个或多个键映射到指定值,则返回 true

Set<K> keySet()  Map映射中的键存储到Set视图的方法

V get(Object key) 返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null

Collection<V> values()   返回此映射中包含的值的 Collection视图。

 V put(K key, V value)   将指定的值与此映射中的指定键关联(可选操作)。(返回key的上一个值,正常情况为null

V remove(Object key)   如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。

void putAll(Map<? extends K,?extends V> m)     从指定映射中将所有映射关系复制到此映射中(可选操作)。

boolean isEmpty()   如果此映射不包含键-值映射关系,则返回 true

 

HashMapHashtable的区别:

        都是键值对集合

         HashMap允许一个空键和多个空值,Hashtable不允许空键和空值;

         HashMap线程不安全(不同步),Hashtable线程安全(同步)

 

Map集合(映射)和Collectin集合的区别:

①Map集合是键值对的集合,Collection是单一出现的数据的集合;

Map的键是唯一的,而Collection的子接口List集合中的元素是可以重复的,Set是唯一的;

Map是夫妻对,Collection是光棍;

Map输出为{key1=value1,key2=value2,…}Collection输出为[T1,T2,…]

 

数组与集合的区别:

一:数组声明了它容纳的元素的类型,而集合不声明。这是由于集合以object形式来存储它们的元素。

二:一个数组实例具有固定的大小,不能伸缩。集合则可根据需要动态改变大小。

三:数组是一种可读/可写数据结构没有办法创建一个只读数组。然而可以使用集合提供的ReadOnly只读方式来使用集合。该方法将返回一个集合的只读版本。


0 0
原创粉丝点击