在这门课的实验里总是会频繁的使用到Java集合框架部分,但是课上并没有一个系统的讲解,在这里我自己通过查找资料的形式学习了一些有关的知识,做一个总结。

------------------------------------------------------------------------------------------------------------------------------

1.集合
对象的容器。实现了对对象常用的操作。
和数组的区别:  
     数组                                            集合
1.长度固定                                   1.长度不固定
2.可以存储基本类型与引用类型     2.只能存储引用类型

在java.util包中

1.Collection体系集合
根接口:Collection
子接口:List   Set
List:有序,有下标,元素可重复(有序指添加时是什么顺序遍历时就是什么顺序)
Set: 无序,无下标,元素不可重复

List: Arraylist    LinkedList Vector(比较老)
Set: HashSet   SortedSet(接口)->TreeSet

2.提供的方法
Collection:
1. add(对象)
2. addAll(另一个集合)
3.  clear();
4. boolean contains(对象)
5. boolean equals(Object a)  比较此集合是否与指定对象相等
6. toArray() 转换成数组
7.removeAll(另一个集合) 删共同
8. retainAll(另一个)  保共同

---------------------------------------------------------------------------------------------------------------------------------

1.集合的遍历:
    1.foreach
    2.迭代器

2.迭代器:Iterator(接口)
三个方法:boolean hasNext()  next()  remove()  
由集合调用iterator()获取
由于并发机制,不允许在迭代过程中调用非remove方法修改集合

2.list集合(可以使用for循环!) remove第一个
    1.add(index,o).....
    2.get(index)
    3.subList()

3.ListIterator
可以nextIndex()
可以逆向遍历Previous
has....()   p..()   p..I..()  使用方法是一样的

4.List实现类
    1.ArrayList:数组结构实现,查询块,增删慢;运行效率块,线程不安全
    2.Vector:与1相同,唯一不同的是他线程安全,慢一些
    3.LinkedList:  链表结构实现,增删快,查询慢(尽管表面有序号,实际是隐式的,即找4号->一个一个找一直找到第四个,其实没有显示的序号)

5.ArrayList:
    1. remove : 实际上是调用了被处理对象的equals方法,因此可以通过重写来改变规则
    2.add源码分析:初始容量:0 add一次:10(ArrayList有个静态默认容量10)
            后来每次不够都是以前的1.5倍

---------------------------------------------------------------------------------------------------------------------------------

1.Vector
capacity();  返回容量
elements();  返回枚举器(Enumeration):  包含方法: hasMoreElements()  nextElement()

2.LinkedList (内部维护一个双向链表,也有一个静态内部类Node(节点),但是该类被封装了,对外只有Node中的Item)

3.泛型
1.5引入的新特性,本质是将类型当作参数传递
常见形式有泛型类,泛型接口,泛型方法 
语法:<T,...>  T称为类型占位符,表示一种引用类型,多个用逗号隔开
好处:    1.提高代码的重用性
    2.防止类型转换异常

(1)泛型类   类名后加<T,..>
所谓参数化类型,即把类型看作一种参数。在泛型类中可以定义变量引用,如T t;可以把T t作为方法的参数,可以把T作为方法的返回值类型,但不能直接new T();因为此时还不确定T的类型,万一没有无参构造器或权限不够呢;且不能作为静态    
    在实例化的时候要确定类型

(2)泛型接口
注意接口中的字段默认时public static final
在实现接口的时候明确泛型
或者实现它的类也是个泛型类,在实例化该类的时候确定(继承父类也是一样)

(3)泛型方法
<T>放在方法返回值的前面
当方法参数中无T时,T表示Object
当有时,传进去是什么类型泛型就是什么类型

4.泛型与集合
在没有声明时,默认为Object
在声明时,强制类型统一
---------------------------------------------------------------------------------------------------------------------------------

1.Set接口
方法全部继承自Collection
    实现类:HashSet  TreeSet

2.HashSet (是用哈希表实现的(外散列表))
使用方式一样
存储过程(访问过程(包括remove)):先计算hashCode,再equals
想改变存储依据,既要改变hashCode也要重写equals
(因为如果只改变equals,第一步计算hashCode就不一样,根本轮不到equals)

3.TreeSet(使用红黑树实现)
    基于排序实现元素不重复
    实现了SortedSet接口,对集合元素自动排序
    元素的对象类型必须实现Comparable接口,指定排序规则
    通过CompareTo方法确定是否为重复元素

内部储存是有顺序的

需要对象实现Comparable接口,重写方法
compareTo->0相同,其他不同
这里的重写可以让排序规则发生改变

4.也可以不实现Comparable接口,改成创建集合时传入一个比较器:Comparator;
这里就展现了泛型的用法,这个比较器接口要有用户去实现,本身并不知道会比较什么类型,就用一个泛型代替

5.可以用TreeSet来实现在某规则下的排序

---------------------------------------------------------------------------------------------------------------------------------

1.Map体系集合(映射)
Map->HashMap(Class)/SortedMap(Interface)->TreeMap(Class)

特点:用于储存任意键值对
          键:无序,无下标,不允许重复
          值:无序,无下标,允许重复

2.基本使用
    put(key,value)(重复对一个键put会替换)
    remove(key)
    keySet()  (获得key的集合)
    entrySet() (获取键值对集合)(Map内部将键值对封装为了Entry)

2.HashMap    JDK1.2加入,线程不安全,运行效率快,允许使用null作为key或是value
构造方法:关键字段:初始容量(默认16)默认加载因子(超过即扩容,默认0.75)复制传入的
防止相同也是用的HashCode与equals
刚创建的时候没有容量,与ArrayList相似

3.HashTable  线程安全,运行效率慢,不允许null作键值或值
Properties  HashTable的子类,要求key和value都是String,通常用于配置文件的读取

4.TreeMap
实现了SortedMap,会对key进行排序
同样,对象需要实现Comparable接口
或者传入比较器Comparator

实际上TreeSet与HashSet都是由他们的Map实现的

5.集合的工具类

Collections(工具类,提供静态方法,类比数组的Arrays)

如:   reverse()  反转元素顺序
    shuffle()  打乱顺序
    sort() 排序  (有个重写方法可以自己写比较器)、
    binarySearch() 二分查找
    copy()  但两个集合大小必须一样(可以先随便加一些)

6.list转数组
.toArray() 传入一个数组
传入数组长度小于List的话会返回与list一样长的
超过就补null

7.数组转list
Arrays类中的asList方法
但此时这个集合是受限集合,不能添加或删除
且基本类型数组需要需要先装箱成引用数组

总结:还有LinkedHashSet(有序)

---------------------------------------------------------------------------------------------------------------------------------

JCF 集合框架小结相关推荐

  1. java jcf查看_Java 集合系列之一:JCF集合框架概述

    容器,就是可以容纳其他Java对象的对象.Java Collections Framework(JCF)为Java开发者提供了通用的容器 java集合主要划分为四个部分: Collection(Lis ...

  2. java jcf查看_Java学习笔记——JCF集合框架

    List基本使用 特别是有顺序,所有可以用get(i)读取出来 public static void main(String[] args) { //1.List基本使用 List lst = new ...

  3. 【Java 集合】集合框架 JCF

    集合框架 JCF 一.概述 二.List - 线性表 1.ArrayList(顺序存储) 2.LinkedList(链式存储 - 双向链表) 3.Vector(顺序存储)  List - 基本操作 三 ...

  4. Java集合框架(JCF)归纳总结

    Java集合框架--JCF,在java 1.2版本中被加入,它包含了大量集合操作,是Java体系中的重要组成部分.网上已有很多JCF的框架图,这里根据自己的理解整理了一份JCF框架图如下: JCF主要 ...

  5. java jcf查看_JAVA 集合框架(JCF)

    网络上搜索java集合框架各种理论知识,图谱都有,只要你认真看就会有收获,博主是一个坚决不随意"造轮子"的新人,所以我的这篇文章就总结一下我所学到的JCF. 首先谈一下我的学习路径 ...

  6. 《Java集合框架JCF》

    <Java集合框架JCF(Java collection framework)> 一.什么是集合? 首先,我们先来大概了解一下集合,集合英文单词collection,在java属于集合框架 ...

  7. java中jcf实例,java 集合框架(JCF)

    Java Collection Framework = java 集合框架 (JCF) 集合可理解为一个容器,该容器主要指映射(map),集合(set),列表(list),散列表(hashtable) ...

  8. java jcf框架干啥的_Java集合框架(常用类) JCF

    Java集合框架(常用类) JCF 为了实现某一目的或功能而预先设计好一系列封装好的具有继承关系或实现关系类的接口: 集合的由来: 特点:元素类型可以不同,集合长度可变,空间不固定: 管理集合类和接口 ...

  9. Java的集合框架(JCF)

    本篇博客主要是对于学的网课的总结.课程是华东师范大学的陈良育老师的Java核心技术.因为想加深一下印象和方便查阅,所以写下这个博客. 首先从数组写起. 数组是存放多个数据的容器. 特点如下: 1.数据 ...

最新文章

  1. php 下载网络文件,PHP实现文件下载
  2. exec sp_prepare @P1 output
  3. svr公式推导_ML-支持向量:SVM、SVC、SVR、SMO原理推导及实现
  4. java怎吗从磁盘读文件_编写一个Java应用程序,该程序使用FileInputStream类,实现从磁盘读取本应用程序源代码文件,并将文件内容显示在屏幕上。...
  5. 推荐引擎内部的秘密3
  6. 在windows上搭建redis集群(Redis-Cluster)
  7. day13 java的多态
  8. python数据预处理
  9. json 转换 java odl_opendaylight:如何查看配置数据库
  10. 伦巴时间步的动作要领_成人拉丁舞_伦巴、恰恰、桑巴舞、牛仔舞、斗牛舞
  11. 高仿大漠找字FindStr
  12. redis持久化(persistent)
  13. C语言sizeof与strlen详解(附大量笔试题题解过程)
  14. 又猎一“狐”:一名外逃越南嫌疑人落网中
  15. 快速拿下CKA认证考试,这些要求和tips你得知道
  16. 并发编程的艺术04-TAS自旋锁
  17. 用Python爬取网易云热门评论(亲测有效)
  18. 逻辑回归实现数字手写识别
  19. JS配置KaTeX渲染LaTeX公式
  20. Dorado5学习笔记

热门文章

  1. 纵观全局,洞察未来物联网转型空间 | 洞见物联网
  2. 二维(三维)坐标系中旋转矩阵详细推导
  3. java 获取父节点_Java根据子节点递归父节点
  4. 【表白系列二】Java实现的表白窗体应用~JFrame实现(雪花飘落)
  5. python requests发送websocket_python之WebSocket协议
  6. 自学stm32,需要会到什么程度才能找到一份工作?
  7. Python 可能没你想的那么好
  8. 电脑端知网网页打不开,而其他人可以打开,同网络下自己手机也可以打开
  9. 机器学习(三十):过采样和欠采样技术
  10. 妙!二十九招驱蚊止痒不再愁