黑马程序员——API-集合框架--集合的概念、List的特点、泛型

来源:互联网 发布:度盘下载器 丢失数据 编辑:程序博客网 时间:2024/05/17 11:06

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------


一、集合的概念

集合是一种容器, 长度可变, 可以存储任意类型的对象. 基本数据类型也可以装入集合, 但其实内部是先自动装箱成包装类对象, 然后再存入集合的。

二、集合体系
集合:
|--Collection
|--List
|--ArrayList
底层数据结构是数组,查询快,增删慢。
线程不安全,效率高。
|--Vector
底层数据结构是数组,查询快,增删慢。
线程安全,效率低。
|--LinkedList
底层数据结构是链表,查询慢,增删快。
线程不安全,效率高。
|--Set
|--HashSet
底层数据结构是哈希表。
如何保证唯一性?
依赖hashCode()和equals()
顺序:
先判断hashCode()值是否相同:
是:继续走equals(),看返回值
true:元素重复。不添加
false:元素不重复。添加
否:直接添加
|--LinkedHashSet
底层数据结构是链表和哈希表。
由链表保证有序(存储和取出一致)。
由哈希表保证元素唯一。
|--TreeSet
底层数据结构是二叉树。
如果保证唯一性?
根据返回值是否是0。
如何排序:
自然排序:Comparable
比较器排序:Comparator
|--Map
|--HashMap
|--LinkedHashMap
|--Hashtable
|--TreeMap


三.集合的常用方法

1.常用方法
add(Object obj) 向集合中添加一个元素, 添到最后的位置
get(int index) 获取集合中指定位置的元素
size() 获取集合的长度
add(int index, Object obj) 向集合中添加一个元素, 添到指定位置
set(int index, Object obj) 把集合中指定位置的元素替换
remove(int index) 删除集合中指定位置的元素
remove(Object obj) 删除集合中包含的obj对象(遍历集合中的元素如果传入的元素equals某个元素就调用remove方法,注意:角标要--)


2、迭代器
A:迭代器其实就是遍历集合的一种方式。
B:迭代器的使用:
迭代器不能单独使用,它依赖于集合而存在。
C:使用步骤
a:通过集合对象调用iterator()方法得到迭代器对象。
b:通过迭代器对象的hasNext()方法判断是否有元素。
c:通过迭代器对象的next()获取元素。
D:原理:
是以内部类形式存在的。
3、案例:

集合的使用步骤:
A:创建集合对象
B:创建元素对象
C:把元素添加到集合中
D:遍历集合
a:通过集合对象调用iterator()方法得到迭代器对象。
b:通过迭代器对象的hasNext()方法判断是否有元素。
c:通过迭代器对象的next()获取元素。
存储字符串并遍历:


<span style="white-space:pre"></span>Collection c = new ArrayList();String s1 = "I";String s2 = "Love";String s3 = "Java";c.add(s1);c.add(s2);c.add(s3);Iterator it = c.iterator();while(it.hasNext()) {String s = (String) it.next();System.out.println(s);}
四.List的三个子类

(1)List的三个子类特点:

ArrayList
底层数据结构是数组,查询和修改快,增删慢
线程不安全,效率高
Vector
底层数据结构是数组,查询慢(相对应ArrayList),增删慢(相对应LinkedList)
线程安全,效率低
LinkedList
底层数据结构是链表,查询和修改慢,增删快
线程不安全,效率高
(2)ArrayList(存储字符串和自定义对象)
(3)Vector(存储字符串和自定义对象)
有自己的特殊功能(方法)。
但是不用,被新功能给替代了。
(4)LinkedList(存储字符串和自定义对象)
有自己的特殊功能。可以很方便的操作头和尾。
(5)案例:
A:ArrayList存储字符串并去除重复值
B:ArrayList存储自定义对象并去除重复值
需求:我们认为同姓名和同年龄的人即为同一个人。
C:用LinkedList模拟栈数据结构


五.泛型

(1)泛型是一种把明确类型放在了创建对象或者调用方法时候才去明确的特殊的类型。
(2)格式:
<数据类型>引用数据类型
(3)好处:
A:解决了黄色警告线问题
B:把运行期间的转换异常给提前到了编译期间
C:优化了程序设计,不需要做强制类型转换了
(4)泛型的体现:
A:泛型类 把泛型定义在类上
B:泛型接口 把泛型定义在接口上
C:泛型方法 把泛型定义在方法上
(5)泛型的使用:
看API中的类或者接口,其后是否跟有<>,如果有,就是泛型的应用。
一般在集合中用。



-------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

0 0