第七章 容器
 
时间:2017年4月27日15:08:30
章节:07章01节~07章04节
视频长度:20:21 +12:38 +3:55 +2:57
内容:容器API
心得:
Java API 所提供的一系列类的实例,用于在程序中存放对象
JDK所提供的容器API 位于java.util包内 结构如下图
 

 
一个关于new 集合的问题
Collection c =new ArrayList();
这是父类指向子类对象 不能访问arraylist里面所独有的
好处是 如果以后如果要变更数据结构 可以直接做变更 因为这种情况下涉及到的方法都是公共的
 
这对于以后讲解控制反转以及一些设计模式 非常有用
//可以放入不同的类型 的对象

不能放基本数据类型 因为基本数据类型是存储在栈上面的 而栈中的内容随时可能被清空
 
    /**
     * Returns a string representation of this collection.  The string
     * representation consists of a list of the collection's elements in the
     * order they are returned by its iterator, enclosed in square brackets
     * (<tt>"[]"</tt>).  Adjacent elements are separated by the characters
     * <tt>", "</tt> (comma and space).  Elements are converted to strings as
     * by {@link String#valueOf(Object)}.
     *
     * @return a string representation of this collection
     */
   
public String toString() {
        Iterator<E> it = iterator();
        if (! it.hasNext())
            return "[]";
 
        StringBuilder sb = new StringBuilder();
        sb.append('[');
        for (;;) {
            E e = it.next();
            sb.append(e == this ? "(this Collection)" : e);
            if (! it.hasNext())
                return sb.append(']').toString();
            sb.append(',').append(' ');
        }
    }
 
容器类对象在调用remove , contains 等方法时需要比较对象是否相等,这会涉及到对象类型的 equals 方法和hasCode方法;对于自定义的类型,需药要重写equals 和hasCode 方法以实现自定义的对象相等规则
 
当某个对象被当做键-值 索引的值的时候 使用hascode方法
 
时间:2017年4月27日15:08:30~2017年4月27日15:33:30
章节:07章05节
视频长度:28:30
内容:Iterator
 

由于jdk1.5之后引入了forEach 以及1.8之后引入了Lambda
迭代器在实际情况中 运用的已经很少了
所以这里只给一张基本方法图 和定义
 
 
时间:2017年4月27日15:33:55~2017年4月27日15:43:14
章节:07章06节
视频长度:09:14
内容:EnhancedFor and Set
心得:
 
int[] arr ={1,2,3,4}
for(int i : arr){
}
Collection c = new ArrayList();
for(Object o : c){
System.out.println(o)
}
但是也有缺点

 
Set接口

实现set的容器类的元素是没有顺序的,并且不可以重复
set就是数学意义上的集合
JDK中所提供的SET容器类有 HashSet , TreeSet
a.retainAll(b) 求交集
a.addAll(b) 将b集合添加到a集合里 重复的不会添加
 
时间:2017年4月27日15:50:11~2017年4月27日15:57:52
章节:07章07节
视频长度:12:28
内容:List and Collections
心得:

set返回值是该位置上原来的元素
 
ArrayList 底层是数组实现的
LinkedList 底层是链表结构实现的

ArrayList和LinkedList在性能上各有优缺点,都有各自所适用的地方,总的说来可以描述如下: 

1.对ArrayList和LinkedList而言,在列表末尾增加一个元素所花的开销都是固定的。对ArrayList而言,主要是在内部数组中增加一项,指向所添加的元素,偶尔可能会导致对数组重新进行分配;而对LinkedList而言,这个开销是统一的,分配一个内部Entry对象。



2.在ArrayList的中间插入或删除一个元素意味着这个列表中剩余的元素都会被移动;而在LinkedList的中间插入或删除一个元素的开销是固定的。



3.LinkedList不支持高效的随机元素访问。



4.ArrayList的空间浪费主要体现在在list列表的结尾预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗相当的空间


可以这样说:当操作是在一列数据的后面添加数据而不是在前面或中间,并且需要随机地访问其中的元素时,使用ArrayList会提供比较好的性能;当你的操作是在一列数据的前面或中间添加或删除数据,并且按照顺序访问其中的元素时,就应该使用LinkedList了。
 
引用一个回答:
主要是数据的组织方式不一样。
arraylist中的数据在内存中是连续的,成块的,查找的时候直接顺序遍历内存就可以了。插入删除的时候,就要把修改的那个节点之后的所有数据都向后移动,或者向前移动。所以就慢了。
而linkedlist在内存中是以链表形式组织的,链表这个玩意说来话太长了。链表中的数据在内存中是松散的,每一个节点都有一个指针指向下一个节点,这样查找起来就比较慢了。而插入删除的时候就是断开一个节点,然后插入删除之后再接起来。具体也不难。自己看书吧。
 
List 常用算法
java.util.Collections 提供了一些静态方法实现了基于list容器的一些常用算法
注意:Collection是一个接口 Collections是类
注意查看api
void sort 对List容器内的元素排序
void shuffle 对List容器内的对象进行随机排列
ovid reverse 对List容器内的对象进行逆序排列
copy(List dest,List src)
将src List容器内容拷贝到dest List容器
int binarySearch
 
时间:2017年4月27日16:03:12~2017年4月27日16:18:07
章节:07章08节
视频长度:18:00
内容:如何选择数据结构与Map
心得:
array读快改慢 linked改快读慢 hash两者之间
hashTable与vector也是数据结构 不过内部是锁定的 
所以不论读或者改 都很慢 ,已经逐渐被淘汰
 
MAP接口
实现Map接口的类来存储 键-值 对
Map 接口的实现类有HahMap和TreeMap实现的
hashMap用哈希表实现的 treeMap使用二叉树中的红黑树实现的
Map类存储的键-值对通过键来表示,所以键值不能重复(equals,所以重写了equals的类必须要重写Hashcode
因为直接equals比较的太慢了 所以要比较hashCode)(这里查看我转发的为什么重写equals一定要重写hashcode方法)
 

put的返回值依旧是原来的key-对应的value值(如果有的话)
 
一般情况下,我们用的最多的是HashMap,HashMap里面存入的键值对在取出的时候是随机的,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。在Map 中插入、删除和定位元素,HashMap 是最好的选择。
TreeMap取出来的是排序后的键值对。但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。
LinkedHashMap 是HashMap的一个子类,如果需要输出的顺序和输入的相同,那么用LinkedHashMap可以实现,它还可以按读取顺序来排列,像连接池中可以应用。
 
时间:2017年4月27日16:20:05~2017年4月27日16:22:19
章节:07章10节
视频长度:7:00
内容:自动打包,解包(自动装箱拆箱)
心得:
在合适的实际自动打包,解包
jdk 1.5之后就支持了自动拆装箱
1.打包:自动将基础数据类型转换为对象
2.解包:自动将对象转换为基础数据类型
 
时间:2017年4月27日16:22:23~2017年4月27日16:26:01
章节:07章11节 07章12节 
视频长度:7:29 +3:12
内容:简单的例子
心得:
略过
 
时间:2017年4月27日16:26:03
章节:07章13节
视频长度:8:29
内容:泛型
心得:

没有泛型的时候 装入集合 都被当成object 然后拿出来的时候转型 
效率低 还容易出问题 
并且这种问题是运行时的问题 很难处理 
根本原因是:失去了类的根本类型

Java基础知识二次学习--第七章 容器的更多相关文章

  1. Java基础知识二次学习--第三章 面向对象

    第三章 面向对象   时间:2017年4月24日17:51:37~2017年4月25日13:52:34 章节:03章_01节 03章_02节 视频长度:30:11 + 21:44 内容:面向对象设计思 ...

  2. Java基础知识二次学习--第六章 常用类

    第六章 常用类   时间:2017年4月26日16:14:49~2017年4月26日16:56:02 章节:06章_01节~06章_06节 视频长度:20:57+1:15+8:44+1:26+11:2 ...

  3. Java基础知识二次学习--第五章 数组

    第五章 数组 时间:2017年4月26日15:11:30~2017年4月26日15:15:54 章节:05章_01节  视频长度:09:30 内容:一维数组的内存分析 心得: Java中数组是引用类型 ...

  4. Java基础知识二次学习--第四章 异常

    第四章 异常处理   时间:2017年4月26日11:16:39~2017年4月26日11:28:58 章节:04章_01节 04章_02节 视频长度:20:46+01:16 内容:异常的概念 心得: ...

  5. Java基础知识二次学习-- 第一章 java基础

    基础知识有时候感觉时间长似乎有点生疏,正好这几天有时间有机会,就决定重新做一轮二次学习,挑重避轻 回过头来重新整理基础知识,能收获到之前不少遗漏的,所以这一次就称作查漏补缺吧!废话不多说,开始! 第一 ...

  6. Java基础知识二次学习-- 第二章 基础语法与递归补充

    第二章 基础语法与递归补充   时间:2017年4月24日10:39:18 章节:02章_01节,02章_02节 视频长度:49:21 + 15:45 内容:标识符,关键字与数据类型 心得:由字母,下 ...

  7. Java基础知识二次学习--第八章 流

    第八章 流   时间:2017年4月28日11:03:07~2017年4月28日11:41:54 章节:08章_01节 视频长度:21:15 内容:IO初步 心得: 所有的流在java.io包里面 定 ...

  8. java 基础知识二 基本类型与运算符

    java  基础知识二 基本类型与运算符 1.标识符 定义:为类.方法.变量起的名称 由大小写字母.数字.下划线(_)和美元符号($)组成,同时不能以数字开头 2.关键字 java语言保留特殊含义或者 ...

  9. java基础知识(二)

    java的布局管理: borderLayout:则将板块分为东西南北中五个方向,每添加一个组件就要指定组件摆放的方位,放置在东西南北四个方向的组件将贴边放置.当拉大Frame的时候,处在center( ...

随机推荐

  1. 老李分享:为何要使用 Web Services

    老李分享:为何要使用 Web Services   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询q ...

  2. ACdream 1112 Alice and Bob (sg函数的变形+素数筛)

    题意:有N个数,Alice 和 Bob 轮流对这些数进行操作,若一个数 n=a*b且a>1,b>1,可以将该数变成 a 和 b 两个数: 或者可以减少为a或b,Alice先,问谁能赢 思路 ...

  3. JDBC基础学习(五)—批处理插入数据

    一.批处理介绍      当需要成批插入或者更新记录时.可以采用Java的批量更新机制,这一机制允许多条语句一次性提交给数据库批量处理.通常情况下比单独提交处理更有效率. JDBC的批量处理语句包括下 ...

  4. Masonry适配的简单使用

    一.Masonry是什么: 答:是一个很好的三方,用来做适配的 二.怎么使用Masonry 1.先导入头文件 #define MAS_SHORTHAND #define MAS_SHORTHAND_G ...

  5. js按值传递和按引用传递

    摘要:js的数据类型有种划分方式为 原始数据类型和 引用数据类型. 原始数据类型 存储在栈(stack)中的简单数据段,也就是说,它们的值直接存储在变量访问的位置.栈区包括了 变量的标识符和变量的值. ...

  6. ASP.NET自定义处理程序

    要创建自定义处理程序,可以创建一个实现IHttpHandler接口的类. 该类有两个重要的参数:IsResuable属性和ProcessRequest方法.如果处理程序实例可以在不同的请求中重用,Is ...

  7. mui上拉加载

    最近在做移动端的项目,用到了mui的上拉加载,整理如下: 1.需要引入的css.js <link rel="stylesheet" href="common/mui ...

  8. Entity Framework查询注意

    首先我们看下where的方法,直接查看定义(定义如下),其实一种是对IEnumerable的扩展,一种是对IQueryable的扩展,直接看最常用的,其实区别就在IEnumerable的扩展的参数是系 ...

  9. PROFINET如何实现实时性

    平时我们都听过文艺作品要“源于生活而高于生活”.PROFINET是基于工业以太网的,用文艺范儿的词汇说就是“源于以太网而高于以太网”.那么,PROFINET是怎么做到“高于以太网”的呢? 要做到比普通 ...

  10. Vmware Vsphere WebService之vijava 开发(二)一性能信息的采集(实时监控)

    最近一直没有更新这部分的内容,会利用五一时间完成vcenter这一个系列. 这里先给大家一本关于vijava开发的书,比较实用. 地址:http://pan.baidu.com/s/1gfkl9mj. ...