黑马程序员--集合框架(一)
2014-06-16 19:24
239 查看
----------------- android培训、java培训、期待与您交流!-----------------
集合框架--
java集合(Collection)就是用来存储对象的容器,不同的对象具有不同的数据结构,java中提供了几种常见的结构用来存储对象
Collection <E> 是所有collection层次结构中的根接口,
1 --List 有序的集合,允许重复元素,允许元素为null。凡有操作角标方法都是该集合体系下的方法,
因为该集合体系有索引。判断集合元素是否相同是使用equals()方法。
a -- Vector 底层是数组结构,线程同步,效率低,已被ArrayList取代。
b -- ArrayList 底层结构与Vector相同,但线程不同步,更安全。查询速度快,增删速度慢。
c -- LinkedList 底册是链表结构,增删速度快,查询速度慢,线程不同步。
2 --Set 无序的集合,不允许重复元素,最多允许一个null元素。Set实现的基础是hashMap结构。
a-- HashSet 底层结构是哈希表,线程不同步。
b-- TreeSet 底层结构是二叉树,特点有序集合(有默认的自然排序,也可自定义比较器排序)。
Map<k,v> 一个不是Collection体系的接口,map提供key到value的映射关系。一个map不能包含相同的key,每个key与value相对应。Map接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射。
1 -- HashTable 底层基于哈希表
,键,值 不能为空。线程同步,jdk1.0出现,效率低。已被1.2的HashMap取代。
2 -- HashMap 底层基于哈希表,允许键值为空(只有一个),线程不同步。
3 -- TreeMap 底层基于二叉树,线程不同步。可对集合中对象进行排序。
这就是java集合的一个大致常用的使用集合容器,这些多个容器的出现,不同的数据有着不同的数据结构,他们有着不同的存储方式。
在看看Collection定义了集合框架的共性方法:
1,添加add(e);addAll(collection);
2,删除 remove(e);removeAll(collection);clear();
3,判断。contains(e); isEmpty();
4,获取 iterator();size();
5,获取交集。retainAll();
6,集合变数组。toArray();
下面来来具体看看List集合的使用方式与应用
1 ArrayList ArrayList实现了可变大小的数组。每个ArrayList实例都有一个容量,即用于存储元素的数组的大小。这个容量可随着不断添加新元素而自动增加。
2 LinkedList
LinkedList实现了List接口,允许null元素。此外LinkedList提供额外的 获取,删除,添加方法在 LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)。
下面看看具体代码
1 ArrayList是基于动态数组的数据结构,LinkedList基于链表的数据结构。
2 对于访问查询数据,ArrayList要优于LinkedList,因为LinkedList只能移动指向标(c中指针)一个一个的去查询
3 对于要对数据进行增删操作,那么LinkedList要优于ArrayList,因为ArrayList要移动数据而LinkedList只要断开或添加指向
特殊条件时-----若只对单个数据插入或删除,ArrayList的速度反而优于LinkedList。
添加删除数据越来,LinkedList的效果越明显
集合框架--
java集合(Collection)就是用来存储对象的容器,不同的对象具有不同的数据结构,java中提供了几种常见的结构用来存储对象
Collection <E> 是所有collection层次结构中的根接口,
1 --List 有序的集合,允许重复元素,允许元素为null。凡有操作角标方法都是该集合体系下的方法,
因为该集合体系有索引。判断集合元素是否相同是使用equals()方法。
a -- Vector 底层是数组结构,线程同步,效率低,已被ArrayList取代。
b -- ArrayList 底层结构与Vector相同,但线程不同步,更安全。查询速度快,增删速度慢。
c -- LinkedList 底册是链表结构,增删速度快,查询速度慢,线程不同步。
2 --Set 无序的集合,不允许重复元素,最多允许一个null元素。Set实现的基础是hashMap结构。
a-- HashSet 底层结构是哈希表,线程不同步。
b-- TreeSet 底层结构是二叉树,特点有序集合(有默认的自然排序,也可自定义比较器排序)。
Map<k,v> 一个不是Collection体系的接口,map提供key到value的映射关系。一个map不能包含相同的key,每个key与value相对应。Map接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射。
1 -- HashTable 底层基于哈希表
,键,值 不能为空。线程同步,jdk1.0出现,效率低。已被1.2的HashMap取代。
2 -- HashMap 底层基于哈希表,允许键值为空(只有一个),线程不同步。
3 -- TreeMap 底层基于二叉树,线程不同步。可对集合中对象进行排序。
这就是java集合的一个大致常用的使用集合容器,这些多个容器的出现,不同的数据有着不同的数据结构,他们有着不同的存储方式。
在看看Collection定义了集合框架的共性方法:
1,添加add(e);addAll(collection);
2,删除 remove(e);removeAll(collection);clear();
3,判断。contains(e); isEmpty();
4,获取 iterator();size();
5,获取交集。retainAll();
6,集合变数组。toArray();
下面来来具体看看List集合的使用方式与应用
1 ArrayList ArrayList实现了可变大小的数组。每个ArrayList实例都有一个容量,即用于存储元素的数组的大小。这个容量可随着不断添加新元素而自动增加。
<span style="font-size:14px;"> /** * ArrayList 基本使用方式 */ public static void arraylistD(){ ArrayList<String> al =new ArrayList<String>(); al.add(0,"a1"); al.add("a2");al.add("a3");al.add("a4"); //添加数据--可在指定位置添加 al.remove(0); //删除指定位置数据 al.set(1, "new a1"); //修改数据 al.get(2); //获取指定位置数据 al.indexOf("a3"); //获取数据的位置 System.out.println(al); // al.clear(); //清除集合元素 // 迭代器---就是集合元素的 取出方式 for (Iterator<String> it = al.iterator(); it.hasNext();) { //迭代器的使用,用于便利元素----迭代时,只能使用迭代器中的方法,是不能使用集合对象中的方法来操作元素的 String s=it.next(); // it.remove(); System.out.println(s); } // Iterator<>迭代器中的方法有限,hasNext()、next()、remove()只能对元素进行判断,取出,删除。不能进行添加,修改的操作 // 这时如果要进行添加修改那么就要使用List集合体系特有的迭代器 for (ListIterator<String> it = al.listIterator(); it.hasNext();) { String s = it.next(); if (s.equals("a2")) { it.set("set aa"); // it.add("00000"); } System.out.println(s); } }</span>
2 LinkedList
LinkedList实现了List接口,允许null元素。此外LinkedList提供额外的 获取,删除,添加方法在 LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)。
下面看看具体代码
/** * LinkedList 特有方法演示 */ public static void linkedlistD(){ LinkedList< String> link =new LinkedList<String>(); link.addFirst("addFirst 1"); //在前|后添加元素 link.addLast("addLast 2"); link.offerFirst("offerFirst 3"); //jdk1.6新方法 link.offerLast("offerLast 4"); System.out.println(link); //获取元素方法,但不删除元素,无元素则报异常NoSuchElementException System.out.println(link.getFirst() +"--get--"+ link.getLast()); //jdk1,6-获取元素,不删除元素,无元素则返回null System.out.println(link.peekFirst() +"--peek--"+link.peekLast()); //获取元素,不删除元素,若无元素则报异常NoSuchElementException System.out.println(link.removeFirst() +"--remove--"+link.removeLast()); //jdk1.6-获取元素,但元素会被删除,若无元素则返回null System.out.println(link.pollFirst()+"--poll--"+link.pollLast()); }再来看看一个用链表进行简单的堆栈和队列模拟
<span style="font-family:Arial;font-size:12px;">/** * 使用LinkedList模拟队列结构 */ class Duilie{ private LinkedList<Object> linkedList; Duilie(){ linkedList = new LinkedList<Object>(); } public void rudui(Object o){ linkedList.addLast(o); } public Object chudui(){ return linkedList.removeFirst(); } public boolean isNull(){ return linkedList.isEmpty(); } } /** * 使用LinkedList模拟堆栈结构 */ class Duizhan{ private LinkedList<Object> linkedList; Duizhan(){ linkedList = new LinkedList<Object>(); } public void jinzhan(Object o){ linkedList.addLast(o); } public Object chuzhan(){ return linkedList.removeLast(); } public boolean isNull(){ return linkedList.isEmpty(); } } public class LinklistTest { public static void main(String[] args) { Duilie d =new Duilie(); d.rudui("zhy 0"); d.rudui("zhy 1"); d.rudui("zhy 2"); d.rudui("zhy 3"); System.out.println("队列--"); while (!d.isNull()) { print(d.chudui()); } print("堆栈--"); Duizhan dz = new Duizhan(); dz.jinzhan("zhy 0"); dz.jinzhan("zhy 1"); dz.jinzhan("zhy 2"); dz.jinzhan("zhy 3"); while (!dz.isNull()) { System.out.println(dz.chuzhan()); } } }</span>ArrayList和LinkedList总结
1 ArrayList是基于动态数组的数据结构,LinkedList基于链表的数据结构。
2 对于访问查询数据,ArrayList要优于LinkedList,因为LinkedList只能移动指向标(c中指针)一个一个的去查询
3 对于要对数据进行增删操作,那么LinkedList要优于ArrayList,因为ArrayList要移动数据而LinkedList只要断开或添加指向
特殊条件时-----若只对单个数据插入或删除,ArrayList的速度反而优于LinkedList。
添加删除数据越来,LinkedList的效果越明显
相关文章推荐
- 黑马程序员—集合框架
- 黑马程序员——集合框架
- 黑马程序员——Java之集合框架(一)
- 黑马程序员----[20150507][集合框架3]
- 黑马程序员—java技术blog—第七篇集合整体基础框架概述
- 黑马程序员——集合框架的工具类
- 黑马程序员:集合框架
- 黑马程序员_JAVAAPI(字符串与集合框架)
- 黑马程序员----Java基础-----集合框架(一)
- 黑马程序员java学习—集合框架List和Set
- 黑马程序员——Java基础--集合框架(1)
- 黑马程序员_集合框架
- 黑马程序员——————java中的集合框架
- 黑马程序员-----Java基础-----集合框架详解
- 黑马程序员-javaSE学习之集合框架
- 黑马程序员——JAVA基础拾遗之泛型和集合框架(二)
- 黑马程序员_Java基础_集合框架(三)_16
- 黑马程序员_集合框架(上)-单列集合类
- 黑马程序员——Java基础---泛型、集合框架工具类:collections和Arrays
- 黑马程序员——集合框架5:集合工具类