黑马程序员——学习日志8集合

来源:互联网 发布:画房间平面图软件 编辑:程序博客网 时间:2024/06/07 02:33

------- android培训、java培训、期待与您交流! ---------- 




1、集合类

      为什么出现集合类:面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式。

          数组和集合类同是容器,有何不同:数组虽然也可以存储对象,但长度是固定的;集合长度是可变的。数组中可以存储基本数据类型,集合只能存储对象。

          集合类的特点:集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象

          一般方法:add(),size(),clear(),contains(),remove(),isEmpty(),retainAll()。

          迭代:Iterator it = 集合对象.iterator();while(iter.hasNext()){}。

           for(Iterator it= 对象.iterator();it.hasNext();){}。

2、Collection接口

          一个独立的元素的序列,这些元素服从一条或多条规则;Collection接口下主要分为List集合和Set集合;List集合的特点是元素有序、允许有重复元素;Set集合的特点是元素无存储顺序、不允许有重复元素。 

3、ListIterator

          此迭代器是List集合特有的迭代器,迭代时,不可以通过集合对象的方法操作集合中的元素,所以,迭代器时,只能通过迭代器的方法操作元素,而Iterator中的方法有限,所以出现ListIterator。具备增删改查方法,特别的一个方法:hasPrevious

4List接口中的类

          Vector:底层是数组数据结构,线程安全,但速度慢,已被ArrayList替代。

          ArrayList:底层是数组数据结构,线程不安全,查询速度快。1.2版本出现。默认容量为10

          LinkedList:底层使用链表数据结构,增删速度快

          取出元素的方式:getint  index);iterator()

          List集合判断元素是否相同,依据的是元素的equals方法。

 

5、枚举

迭代Vector集合中的元素可以使用Enumeration,通过Enumeration的hasMoreElements()方法判断是否还有元素,通过Enumeration的nextElement()方法返回下一个元素。Vector特有方法。

6、HashSet

      底层数据结构是哈希表,通过equals方法和hashCode方法来保证元素的唯一性。

存储对象时,先调用对象的hashCode()方法计算一个哈希值,在集合中查找是否有哈希值相同的对象。如果没有哈希值相同的对象,直接存入。如果有哈希值相同的对象,则和哈希值相同的对象进行equals()方法比较。equals()方法比较结果相同则不存,不同就存入。

7、TreeSet

可以对Set集合中的元素进行排序。通过compareTo方法或者compare方法中的指定算法来保证元素的唯一性。元素是以二叉树的形式存放的。

保证元素唯一性的依据:compareTo方法return   0的时候

自然顺序:将要存储的类实现Comparable接口,重写compareTo方法,在方法中指定算法

比较器顺序:在创建TreeSet时,传入一个比较器Comparator,在比较器的compare方法中指定算法

8、泛型

由于集合可以存储不同类型的数据,所以取元素时有可能会导致类型转换错误

JDK1.5增加了新特性泛型,为了减少操作集合时出错的几率

集合一旦声明了泛型,便只能存储同一类型的对象了

使用方法:ArrayList<Person> al = new ArrayList<Person>();

使用泛型的好处

提高了程序的安全性

将运行期遇到的问题转移到了编译期

省去了类型强转的麻烦

泛型类的出现优化了程序设计

      静态方法不可以访问类上定义的泛型,但可以在类上定义泛型。

9、Map接口

一组成对的”键值对”对象,允许根据键来查找值

Map集合的键不允许有重复,所以Map的所有键构成了一个Set集合

特点:Map存储了一系列键值的映射关系;Map集合需要保证键的唯一性;可以通过键获得值,反之则不能;Map集合存储元素使用put(key,value)方法  

10、Map集合子类

Hashtable:哈希表数据结构,线程安全,速度慢,不允许存放null键,null值,已被HashMap替代。JDK1.0

HashMap:哈希表数据结构,线程不安全,速度快,允许存放null键,null值。JDK1.2

TreeMap:二叉树数据结构,对键进行排序,排序原理与TreeSet相同。底层使用Map集合。

put添加元素时,如果添加相同的键,后一个值覆盖原有键对应值并put返回原有值。

 

11、Map与Collection

Map与Collection在集合框架中属并列存在;Map存储的是键值对;Map存储元素使用put方法,Collection使用add方法;Map集合没有直接取出元素的方法,而是先转成Set集合,在通过迭代获取元素;Map集合中键要保证唯一性

12、Collections

工具类,提供了对集合的常用操作;对集合进行查找;取出集合中的最大值,最小值;对List集合进行排序

13、增强for循环

新接口Iterable中定义了增强for循环;可以通过增强for循环对数组和集合进行遍历;语法:for(类型 变量名:  要遍历的容器) { ……};对集合进行遍历,只能获取元素,不能对集合惊醒操作,而迭代器还可以进行remove动作

14、可变参数

有的时候在设计方法时无法确定将来别人会传入的参数个数;JDK1.5增加了新特性可变参数,在函数中只声明参数类型,不规定个数;方法接受的参数实际上是一个数组,可以在方法中遍历数组;可变参数只能被定义为函数的最后一个形参;语法格式: 返回值 函数名(参数类型… 形参名)。使用时注意,可变参数定义在参数列表的最后。

 

 

 




------- android培训、java培训、期待与您交流! ----------

0 0
原创粉丝点击