黑马程序员—java集合框架
来源:互联网 发布:乐乎记录生活 编辑:程序博客网 时间:2024/06/05 03:21
------- android培训、java培训、期待与您交流! ----------
集合:对对象进行存储的一种方式。
1、add方法的参数类型是Object,以便于接收任意类型对象;
什么是迭代器呢?2、集合中存储的都是对象的引用。
其实就是集合取出元素的方式;Iterator it=al.iterator();获取迭代器,用于取出集合中的元素。
Collection
|------List:元素是有序的,元素可以重复,因为该集合体系有索引;
|------ArrayList:底层的数据结构使用的是数组结构;特点:查询速度很快,但是增删稍慢;线程不同步。
|-------LinkedList:底层的数据结构使用的是链表结构;特点:增删速度很快,查询稍慢;特有方法有:addFirst(); addFirst()(在jdk1.6中用offerFirst();offerLast()替代了);在 getFirst();getLast()(获取元素,但不删除元素,如果集合中没有元素,会出现NoSuchElementException异常;在jdk1.6中用peekFirst();peekLast()替代了); removeFirst();removeFirst()(获取元素,并删除元素,如果集合中没有元素,会出现NoSuchElementException异常,在jdk1.6中用pollFirst();pollLast()替代了);
|-------Vector:底层是数组数据结构,线程同步。被ArrayList淘汰了;枚举是Vector特有的取出方式,枚举和迭代器是一样的,因为枚举的名称以及方法的名称都过长,所以被迭代器取代了。
|------Set:元素是无序的,元素不可以重复。
|------HashSet:底层数据结构是哈希表,线程非同步
HashSet是如何保证元素唯一性的呢?
是通过元素的两个方法hashCode和equals来完成的,如果元素的HashCode值相同,才会判断equals是否为true;如果元素的hashCode值不同,不会调用equals;注意,对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashCode和equals方法。
|------TreeSet:可以对Set集合中的元素进行排序;底层数据结构是二叉树,保证元素唯一性的依据,compareTo方法return 0;
TreeSet排序的第一种方式:让元素自身具备比较性,元素需要实现Comparable接口,覆盖compareTo方法,这种方式也称为元素的自然顺序,或者叫做默认顺序。
TreeSet的第二种排序方式:当元素自身不具备比较性时,或者具备的比较性不是所需要的,这时就需要让集合自身具备比较性;在集合初始化时,就有了比较方式;定义比较器,将比较器对象作为参数传递给TreeSet集合的构造函数;
当两种排序都存在时,以比较器为主;定义一个类,实现Comparator接口,覆盖compare方法。
List特有方法,凡是可以操作角标的方法都是该体系特有的方法:
增:add(index,element);addAll(index,Collection);
删:remove(index);
改:set(index,element);
查:get(index);sublist(from,to);listIterator();
List集合特有的迭代器,ListIterator是Iterator的子接口。
泛型:jdk1.5版本以后出现新特性,用于解决安全问题,是一个安全机制;在迭代时,不可以通过集合对象的方法操作集合中的元素,因为会发生ConcurrentModificationException异常;所以,在迭代器时,只能用迭代器的方法操作元素,可是Iterator的方法是有限的,只能对元素进行判断,取出,删除的操作;如果想要其他的操作如添加、修改等,就需要使用其子接口ListIterator;该接口只能通过List集合的listIterator方法获取。
好处:
1、将运行时期出现问题ClassCastException,移动到了编译时期,方便于程序员解决问题,让运行时期问题减少,安全;
2、避免了强制转换的麻烦。
Map集合:该集合存储键值对,一对一对往里存,而且要保证键的唯一性。泛型格式:通过< >来定义要操作的引用数据类型,如ArrayList<String> al=new ArrayList<String>();
在使用java提供的对象时,什么时候写泛型呢?
通常在集合框架中很常见,只要见到< >就要定义泛型,其实< >就是用来接收类型的,当使用集合时,将集合中要存储的数据类型作为参数传递到< >中即可。
什么时候定义泛型类?
当类中要操作的引用数据类型不确定的时候,早期定义Object来完成拓展,现在定义泛型来完成扩展。
泛型类定义的泛型,在整个类中有效,如果被方法使用,那么泛型类的对象明确要操作的具体类型后,所有操作的类型就已经固定了;为了让不同方法可以操作不同类型,而且类型还不确定,那么可以将泛型定义在方法上。
特殊之处:静态方法不可以访问类上定义的泛型;如果静态方法操作的引用数据类型不确定,可以将泛型定义在方法上。
?通配符,也可以理解为占位符;
泛型的限定:? extends E,可以接收E类型或者E的子类型,上限;? Super E,可以接收E类型或者E的父类型。
附加知识:|------Hashtable:底层是哈希表数据结构,不可以存入null键和null值,该集合是线程同步;JDK1.0,效率低;
|------HashMap:底层是哈希表数据结构,允许使用null值和null键,该集合是不同步的,替代Hashtable,JDK1.2,效率高;
|------TreeMap:底层是二叉树数据结构,线程不同步,可以用于给Map集合中的键进行排序。
增:put(K key, V value);putAll(Map<? extends K,? extends V> m)
删:clear();remove(Object key)
改:containsKey(Object key);containsValue(Object value);isEmpty()查:get(Object key);size();values();entrySet();keySet()
Map集合的两种取出方式:
1、Set<K> keySet:将Map中所有的键存入到Set集合,因为set具备迭代器,所以可以用迭代方式取出所有的键,在根据get方法,获取每一个键对应的值。
Map集合取出原理:将Map集合转成Set集合,再通过迭代器取出。
2、Set<Map.Entry<k,v>> entrySet:将Map集合中的映射关系存入到了Set集合中,而这个关系的数据类型是Map.Entry。
Map.Entry其实Entry也是一个接口,它是Map接口中的一个内部接口
高级for循环,格式:for(数据类型 变量名:被遍历的集合(Collection)或者数组){};对集合进行遍历只能获取集合元素,但是不能对集合进行操作;迭代器除了遍历,还可以进行remove集合中元素的动作,如果是用ListIterator,还可以在遍历过程中对集合进行增删改查的动作。
可变参数:方法名(类名...参数名),如show(int... Arr);可变参数,其实就是一种数组参数的简写形式,不用每一次都手动的建立数组对象,只要将要操作的元素作为参数传递即可,隐式将这些参数封装成了数组;在使用时注意,可变参数一定要定义在参数列表的最后面。
静态导入:如import static java.util.Arrays.*;导入的是Arrays这个类中的所有静态成员;当类名重名时,需要指定具体的包名;当方法重名时,需要指定具体所属的对象或类。
- 黑马程序员——Java集合框架
- 黑马程序员——Java集合框架
- 黑马程序员——java集合框架
- 黑马程序员——java-集合框架
- 黑马程序员——JAVA集合框架
- 黑马程序员——java集合框架
- 黑马程序员——Java集合框架
- 黑马程序员——Java集合框架
- 黑马程序员—java集合框架应用
- 黑马程序员—java集合框架
- 黑马程序员—Java集合框架(LinkedList)
- 黑马程序员—java集合框架整理
- 黑马程序员—Java集合框架
- 黑马程序员--java集合框架
- 黑马程序员 Java集合框架
- 黑马程序员 java 集合框架
- 黑马程序员 Java集合框架
- 黑马程序员--Java集合框架
- 表单中回车选择下一个文本框,兼容IE,Chrome
- 练习Win32编程的方法
- Java Web----Java Web的数据库操作(二)
- php 广告加载类
- Redhat 或 cent os 下 Gnome 和 KDE
- 黑马程序员—java集合框架
- 获取Android GoogleMap API V2密钥详解
- 2013年8月6号
- Spring支持的事务策略
- 我的大学六年(单片机大师郭天祥原创)
- java base64
- poj 2253 Frogger 1797 Heavy Transportation
- :first选择器(jQuery)
- 数据结构的求长操作