Java基础篇-集合

1、 什么是集合

      存储对象的容器,面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,存储对象,集合是存储对象最常用的一种方式。集合的出现就是为了持有对象。集合中可以存储任意类型的对象,而且长度可变。在程序中有可能无法预先知道需要多少个对象, 那么用数组来装对象的话, 长度不好定义, 而集合解决了这样的问题。

      常见集合知识和面试题(点击下载)


2、集合和数组的区别

      数组和集合类都是容器、数组长度是固定的,集合长度是可变的。数组中可以存储基本数据类型,集合只能存储对象数组中存储数据类型是单一的,集合中可以存储任意类型的对象。



3、集合类结构图

Java基础篇-集合_第1张图片



4、集合父子结构

              ----| Iterable               接口 

----| Collection       接口
---------| List          可以有重复元素的集合
           ---------| ArrayList  

                                  ---------| LinkedList    

               ---------| Set           不可以有重复元素的集合

                                 ---------|HashSet  线程不安全,存取速度快。底层是以哈希表实现的。

                                 ---------| TreeSet  红-黑树的数据结构,默认对元素进行自然排序(String)。

     List集合允许元素可以重复,允许在指定位置插入元素,并通过索引来访问元素。

     Set集合用于存储无序(存入和取出的顺序不一定相同)元素,值不能重复。


5、Collection共同方法

增加:
1:add()               将指定对象存储到容器中、add 方法的参数类型是Object 便于接收任意对象。
2:addAll()           将指定集合中的元素添加到调用该方法和集合中。
删除:
3:remove()         将指定的对象从集合中删除。
4:removeAll()     将指定集合中的元素删除。
修改:
5:clear()             清空集合中的所有元素。

判断:

6:isEmpty()         判断集合是否为空。

7:contains()        判断集合何中是否包含指定对象。

8:containsAll()    判断集合中是否包含指定集合。

9:equals()           判断两个对象是否相等 。 
获取:           int size()    返回集合容器的大小。
       转成数组:  toArray()    集合转换数组。



5.1、ArrayList

 
       ArrayList数组实现, 查找快,因为数组的内存空间地址是连续的。ArrayList底层维护了一个Object[] 用于存储对象,默认数组的长度是10。当默认的或者指定的容量不够存储对象的时候,容量自动增长为原来的容量的1.5倍。由于ArrayList是数组实现, 在增和删的时候会牵扯到数组增容, 以及拷贝元素. 所以慢。数组是可以直接按索引查找, 所以查找时较快。
     
List<String> list = new ArrayList<String>();
list.add("tianjia");
 
   
//遍历全部元素
Iterator<String> iterator = list.iterator();
while(iterator.hasNext()){
 String str = (String) iterator.next();
 System.out.println(str);
}



5.2、LinkedList

        LinkedList链表实现, 增删快,查找慢。 LinkedList是链表实现的,在内存中的地址不连续,需要让上一个元素记住下一个元素。所以每个元素中保存的有下一个元素的位置,虽然也有角标,但是查找的时候,需要从头往下找,显然是没有数组查找快的。但是,链表在插入新元素的时候,只需要让前一个元素记住新元素,让新元素记住下一个元素就可以了。所以插入快。

public static void main(String[] args) {
    LinkedList list = new LinkedList();
    list.add("aa");
    list.add("bb");
    list.add("cc");
    Iterator dit = list.descendingIterator();
    while (dit.hasNext()) {
        System.out.println(dit.next());
    }
}
 
   
 
   


5.3、Vector

       java.util.vector提供了向量类(vector)以实现类似动态数组的功能。描述的是一个线程安全的ArrayList。ArrayList是单线程效率高,Vector是多线程安全的,所以效率低。

Vector<String> vector = new Vector<String>(10);
vector.add("test1");
vector.add("test2");
 
   
Iterator<String> iterator = vector.iterator();
while(iterator.hasNext()){
   String string = (String) iterator.next();
   System.out.println(string);
}




6.1、HashSet

        HashSet实现了Set接口,它不允许集合中有重复的值,当我们提到HashSet时,第一件事情就是在将对象存储在HashSet之前,要先确保对象重写equals()和hashCode()方法,这样才能比较对象的值是否相等,以确保set中没有储存相等的对象。如果我们没有重写这两个方法,将会使用这个方法的默认实现。对于 HashSet 而言,它是基于 HashMap 实现的,HashSet 底层采用 HashMap 来保存所有元素。HashSet存储元素的顺序并不是按照存入时的顺序是按照哈希值来存的所以取数据也是按照哈希值取得。


public static void main(String[] args) {    
      Set<Comparable> hs = new HashSet<Comparable>(6);
      
      hs.add("abc");
      hs.add(new Date());//HashSet里增加日期对象
       hs.add(new Integer(12));
      
      Iterator<Comparable> it = hs.iterator();
      while(it.hasNext()){ 
         System.out.println(it.next()); 
      } 
   }
}



6.2、TreeSet

       是一个有序的二叉树,那么同理TreeSet同样也是一个有序的,它的作用是提供有序的Set集合。
/排序
public static void main(String[] args) {
    String str = "8 10 15 5 2 7";
    String[] strs = str.split(" ");
    TreeSet ts = new TreeSet();
    for (int x = 0; x < strs.length; x++) {
        int y = Integer.parseInt(strs[x]);
        ts.add(y);
    }
    System.out.println(ts);
}




7、Map集合结构

 ---| Map  接口    将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。
             ---| HashMap  采用哈希表实现,无序
             ---| TreeMap   可以对健进行排序



7.1、Map集合方法

添加:
1、V put(K key, V value)    (可以相同的key值,但是添加的value值会覆 盖前面的,返回值是前一个,如果没有就返回null)                                          
2、putAll(Map m)  从指定映射中将所有映射关 系复制到此映射中(可选操作)。
删除:
1、remove()    删除关联对象,指定key对象

2、clear()         清空集合对象

获取: value get(key); 可以用于判断键是否存在的情况。当指定的键不存在的时候,返 回的是null。

判断:
1、boolean isEmpty()   长度为0返回true否则false
2、boolean containsKey(Object key)  判断集合中是否包含指定的key
3、boolean containsValue(Object value)  判断集合中是否包含指定的value

4、长度:Int size()




7.2、HashMap

       HashMap实现了Map接口,Map接口对键值对进行映射。HashMap允许键和值为null。HashMap是非synchronized的,但collection框架提供方法能保证HashMap synchronized,这样多个线程同时访问HashMap时,能保证只有一个线程更改Map。

Map<String,String> map = new HashMap<String,String>();
map.put("1", "张三");
map.put("2", "李四");
map.put("3", "王五");
//使用for循环遍历
for (Map.Entry entry :map.entrySet()){
    System.err.println(entry.getKey()+":"+entry.getValue());
}



7.3、TreeMap

        TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使,TreeMap的实现是红黑树算法的实现,TreeMap 非线程安全。







你可能感兴趣的:(@基础知识,————[,Java基础,])