java_集合_总结

来源:互联网 发布:笨马网络 编辑:程序博客网 时间:2024/06/04 20:08
时间:2017-07-30
 
集合:是对数组的升华  不必考虑数组的长度 解放了劳动力【高级语言才有的属性】
使用集合后如果长度不够用时,自动新增 以1.5倍的扩张  数组的长度是固定的




Iterator 
-Collection 
-Map  


--------------------------------------------------------------------------------
collection接口包括: 
List、Set 接口有以下实现类
List接口包括:Arraylist  linkedlist
Set接口包括: HashSetTreeSet


Map接口包括:HashMap、TreeMap
---------------------------------------------------------------------------------
list是一组不唯一有序的对象  不需要指定下标 add()、get()
set 是一组 唯一 无序的对象
map 是一组键值对的对象


集合框架在 util包中 必须使用import导入包


list 接口有的方法
add(object) 添加一个新的元素
get(index)  获取第i个元素
remove(index) 移除第i个元素
contains(object)是否包含这个元素
isEmpty() 是不是空的?
clear() 清除所有的元素
size() 这个集合的大小
toArray() 转化成数组


linked常用的方法
addFirst()
addLast()
fetFirst()
getLast()
removeFirst()
removeLast()


------------------------------------------------------------------------------------
set接口遍历必须使用iterator 迭代器 set判断是否重复是根据hashcode来判断的


Map集合存放的键值对(key-value) 本质是两个集合 keyset 和 valueset
中常用的map类有 HashMap 和 Hashtable


Map中常用的方法有
put(key,object)新增一个元素
clear()
containskey(key)
containsValue(object)
get(key)
keySet() 
remove(key)
size()


map集合的遍历 获取keyset集合 遍历它来遍历map


-----------------------------------------------------------------------------------


FoeEach 
语法 :for(元素类型t 元素变量x:遍历对象obj){
引用了x的java语句;
}


可以遍历list、set
例子:
List l = new List()
for(String t:l){
syso(l);
}


Set s = new Set();
for(String t:s){
syso(t);
}

---------------------------------------------------------------------------------


1.简单介绍集合和数组的区别
  首先从可变得概念上来入手,用来区分和数组最基本的一个不同点。
  然后说分类,Collection(List,Set)  Map


2.介绍ArrayList
  ArrayList a =new ArrayList();默认开辟10个元素的空间。
  ArrayList a =new ArrayList(50);默认开辟50个元素的空间
  在内存上是连续的
  适用于遍历
  因为对该集合某个元素的删除动作或者添加动作,会导致该元素后面的元素产生移位


3.linkedlist
  在内存上是零散的
  有序(添加顺序)
  链表结构
  适合增、删
  拥有List接口所没有的6个方法()


4.java中Vector和ArrayList的区别


首先看这两类都实现List接口,而List接口一共有三个实现类,分别是ArrayList、Vector和LinkedList。List用于存放多个元素,能够维护元素的次序,并且允许元素的重复。3个具体实现类的相关区别如下:


ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要讲已经有数组的数据复制到新的存储空间中。当从ArrayList的中间位置插入或者删除元素时,需要对数组进行复制、移动、代价比较高。因此,它适合随机查找和遍历,不适合插入和删除。
Vector与ArrayList一样,也是通过数组实现的,不同的是它支持线程的同步,即某一时刻只有一个线程能够写Vector,避免多线程同时写而引起的不一致性,但实现同步需要很高的花费,因此,访问它比访问ArrayList慢。
LinkedList是用链表结构存储数据的,很适合数据的动态插入和删除,随机访问和遍历速度比较慢。另外,他还提供了List接口中没有定义的方法,专门用于操作表头和表尾元素,可以当作堆栈、队列和双向队列使用。
        
-------------------------------------------------
5.HashMap和Hashtable的区别


 HashMap不是线程安全的


            hastmap是一个接口 是map接口的子接口,是将键映射到值的对象,其中键和值都是对象,并且不能包含重复键,但可以包含重复值。HashMap允许null key和null value,而hashtable不允许。


 HashTable是线程安全的一个Collection。


HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。 HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。 HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。 Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。 最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。 Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差

























原创粉丝点击