Java的集合类是一些很是实用的工具类,主要用于存储和装载数据 (包括对象),所以,Java的集合类也被成为容器。在Java中,全部的集合类都位于java.util包下,这些集合类主要是基于两个根接口派生而来,它们就是 Collection和 Map。html
Collection派生出三个子接口,java
Set表明不可重复的无序集合、数组
List表明可重复的有序集合、安全
Queue是java提供的队列实现,架构
经过它们不断的扩展出不少的集合类,例如Vector、ArrayList、LinkedList、Deque等,其分布图以下:框架
Map接口是和Collection同等级的根接口,它表示一个键值对(key-value)的映射,每个key对应一个value,查找Map中的数据,老是根据key来获取,因此key是不可重复的,它用于标识集合里的每项数据。跟Collection同样,Map接口派生了不少的集合子类,这是Map的体系架构图:工具
http://www.javashuo.com/article/p-yvhybxhq-a.html性能
Vector、ArrayList、LinkedList这3者都是实现集合框架的List,也就是所谓的有序集合,所以具体功能也比较近似,好比均可以按照位置进行定位、添加或者删除的操做,都提供迭代器遍历其内容。但由于具体的设计区别,在行为、性能、线程安全等方面。表现又有很大不一样。spa
List
是一个接口,不能实例化
,须要一个具体类来实现实例化。List 集合中的对象按照必定的顺序排放,里面的内容能够重复。 List
接口实现的类有:ArrayList
(实现动态数组),Vector
(实现动态数组),LinkedList
(实现链表),Stack
(实现堆栈)。.net
ArrayList是应用更加普遍的动态数组实现,它自己不是线程安全的,因此性能要好不少。与Vector近似,ArrayList也是能够根据须要调整容量,不过二者的调整逻辑有区别,Vector在扩容时会提升一倍,而ArrayList会增长50% .
Vector是Java早期提供的线程安全的动态数组,若是不须要线程安全,并不建议选择,毕竟同步是有额外开销的。Vector内部是使用对象数组来保存数据,能够根据须要来自动的增长容量,当数组已满时,会建立新的数组,并copy原有数据。
是Java提供的双向链表。它不须要象上面两种那样调整容量,它也不是线程安全的。
Vector和ArrayList做为动态数组,其内部元素以数组形式顺序存储,因此很是适合随机访问的场合。除了尾部插入和删除元素,每每性能会较差,好比咱们在中间位置插入一个元素,须要移动后面全部元素。
而LinkedList进行节点插入删除要高效不少,可是随机访问性能则要比动态数组慢。
import java.util.Map;
import java.util.HashMap;
put(Object key,Object value) // 添加 putAll(Collection c) // 添加 get(Object key) //根据键来获取对应的值 containsKey(Object key) // 是否包含key containsValue(Object value) // 是否包含value remove(Object key) //删除key values() //获取全部的values isEmpty() //判断Map是否为空 entrySet() // keySet() //获取全部的key,返回的是Set
//建立HashMap HashMap<String,String> hm1 = new HashMap<String,String>(); HashMap<String,String> hm2 = new HashMap<String,String>(); String [] key = {"name","age","tender"}; String [] value = {"zhangsan","16","men"}; //添加元素 //hm2 hm2.put("id","012"); hm2.put("describe", "zhangdelaohaokanle"); //hm1一个一个添加 for(int i = 0;i<3;i++){ hm1.put(key[i], value[i]); } //hm1直接全添加 hm1.putAll(hm2); //根据key获取值 String name = hm1.get("name"); //hm1是否包含value, key boolean flag = hm1.containsValue("013"); boolean flag = hm1.containsKey("age"); //hm1删除并返回 String des = hm1.remove("describe") //获取全部的values Collection<String> li = hm1.values(); //获取全部的keys Set<String> set = hm1.keySet();
package test; import java.util.HashMap; import java.util.Iterator; import java.util.ArrayList; import java.util.Collection; import java.util.Map.Entry; import java.util.Set; public class test6 { public static void main(String[] args) { HashMap<String,Integer> map =new HashMap<>(); map.put("a", 1); map.put("b", 2); map.put("c", 3); map.put("d", 4); // Map map=new HashMap(); // map.put("a", "aaa"); // map.put("b", "bbb"); // map.put("c", "ccc"); // map.put("d", "ddd"); //hashMap遍历方法1 Iterator<String> iterator = map.keySet().iterator(); while (iterator.hasNext()) { Object key = iterator.next(); System.out.println("map.get(key) is :"+map.get(key)); } //遍历方法2 Set<Map.Entry<String, Integer>> set=map.entrySet(); Iterator<Map.Entry<String, Integer>> it=set.iterator(); while(it.hasNext()){ //System.out.println(list.get(0) ); Map.Entry<String, Integer> e=it.next(); System.out.println(e.getKey()+":"+e.getValue()); } System.out.println(map.containsValue(1) ); System.out.println(map.containsKey("a") ); System.out.println(map.size() ); System.out.println(map.remove("a") ); System.out.println(map.size() ); System.out.println(map.containsKey("a") ); System.out.println(map.containsValue(1) ); //ArrayList <Integer> list =(ArrayList<Integer>)map.values(); //上面会出现异常,由于map.values()返回的是一个Collection<Integer>对象,可用下面的方法解决 ArrayList <Integer> list =new ArrayList<Integer>(map.values()); Iterator <Integer>ite=list.iterator(); while(ite.hasNext()){ //System.out.println(list.get(0) ); System.out.println(ite.next() ); } map.clear(); System.out.println(map.isEmpty() ); } }
length是针对各类数组的属性,好比int[], char[], byte[], string[];
length()是针对String的方法,通常用于 if(s == null || s.lenght() == 0){return ;}
size()是针对集合类的方法, 通常用于 Set( HashSet,TreeSet), List(ArrayList, LinkedList), Map(HashMap, SortedMap..等) 这些集合类获取集合元素的数量。
https://blog.csdn.net/i000zheng/article/details/78850165
http://www.javashuo.com/article/p-okjvwrod-n.html
https://blog.csdn.net/weixin_41434306/article/details/88582800