死亡笔记2--java中的集合详解

原创 2015年07月10日 11:08:23
集合


集合和数组的区别?


数组:数组既可以储存基本数据类型,也可以储存引用类型.它储存引用类型的数组的时候叫对象数组.数组长度固定,而且只能储存一种类型.
集合:集合只能储存引用类型,但是集合的长度可变,集合可以存储不同数据类型.


集合的集成体系结构?
由于需求不同,java提供了不同的集合类,着多个集合类的数据结构不同,但是他们都是提供供存储和遍历功能的.
我们把他们的共性不断的向上提取,最终就形成了集合的继承体系结构图.


Collection
           |--List
          |--ArrayList
  |--Vector
  |--LinkedList
|--Set
  |--HashSet
  |--TreeSet


java提供了各种集合类,他们的数据结构不同.但是,他们肯定有共性的内容(存储,获取,判断等),通过不断的向上提取,我们就能得到一个集合的继承体系结构,这个体系的老大是:Collection


Collection存储自定义对象并遍历:
public class Student{
private String name;
private int age;
public Student(String name,int age){
this.name=name;
this.age=age;
}
public String toString(){
return name+"----"+age;
}
}   
public class StudentDemo{
public static void main(String[] args){
//创建集合对象
Collection c=new ArrayList();

//创建学生对象,并添加到集合
c.add(new Student("孙悟空",21));
c.add(new Student("猪八戒",20));
c.add(new Student("沙僧",18));
c.add(new Student("唐僧",30));
//遍历结合

Iterator iterator=c.Iterator();
while(iterator.hasNext()){
System.out.println((Student)iterator.next().toString);
}
}
}
迭代器中的并发修改异常:
出现的原因:迭代器遍历集合,集合修改集合元素
解决方案
迭代器遍历:使用List专有的迭代器(ListIterator)
集合遍历:集合修改(size()和get())

常见数据结构:
A:栈 先进后出
B:队列 先进先出
C:数组 查询快,增删慢
D:链表 查询满,增删快

List的子类特点(面试题)
ArrayList:底层数据结构是数组,查询快,增删慢
 线程不安全,效率高
 
Vector:底层数据结构是数组,查询快,增删慢
  线程安全,效率高
  
LinkedList:底层数据结构是链表,查询慢,增删快
  线程不安全,效率低
  
泛型:是一种把明确类型的工作推迟到创建对象或者调用方法的时候才去明确的特殊类型.
也被称作参数化类型,把类型当做参数一样传递

格式:<数据类型>  注意:概述类型只能是引用类型


泛型在那些地方使用呢?
看API,如果类 结构 抽象类后面跟的有<E>就要使用泛型,一般就在集合中使用
好处:把运行时期的问题提前到了编译时期(编译原则)
避免了强制类型转换
优化了程序设计,解决了黄色警告先问题,让程序更安全


泛型的高级通配符:
? 任意的类型都可以
? extends E 向下限定,E及其子类
? super E 向上限定,E及其父类


增强for循环:
是for循环的一种
格式:for(元素的数据类型 变量名:数组或者Collection集合的对象){}
好处:简化了数组和集合的遍历
弊端:增强for循环的目标不能为null,建议在使用前,先判断是否为null值


Set集合:
Set集合的特点:无序,唯一


HashSet:底层数据结构是哈希表(是一个元素为链表的数组)
哈希表底层依赖两个方法:hashCode()和equals()
注意:在添加自定义对象时,HashSet底层以来的是hashCode()和equals()方法,而这两个方法在自定义对象中没有重写,所以默认使用的是Object类中的方法,这个时候他们的哈希值是不会一样的,
所以就不会判断 直接添加.
执行顺序:
首先比较哈希值是否相同
不相同就添加
相同:继续执行equal()方法
返回ture:元素重复了,不添加
返回false:直接把元素添加到集合


如何保证元素的唯一性呢?
由hashCode()和equals()保证的


TreeSet集合:
底层数据结构是红黑树(一种自平衡的二叉树)
保证元素的排列方式:
自然排序:让元素所属的类实现Comparable接口
比较器排序:让集合构造方法接受Comparator的实现类对象


Map集合:
将键映射到值的对象.一个雷蛇不能包含重复的键;每个键最多只能映射到一个值
Map和Collection的区别?
map存储的是键值对形式的元素,键唯一,值可以重复. 夫妻对
Collection存储的是单独出现的元素,子接口Set元素唯一,子结构List元素可重复


Map集合的遍历:
1 键找值  
          获取所有键的集合
 遍历键的集合,得到每一个键
 根据键到集合中去找值
 
2 键值对对象找键和值
     获取所有的键值对对象
 遍历键值对对象的集合,获取每一个键值对对象
 根据键值对对象去获取键和值


Collections工具类:
是针对集合进行操作的工具类
面试题:Collection和 Collections的区别?
Collection是单列集合的顶层接口,有两个子接口List和Set
Collections是针对集合进行操作的工具类,可以对集合进行排序和查找


面试题:List,Set和Map等接口是否都继承自Map接口?
List和Set不是继承自Map接口,他们继承自Collection接口
Map接口本事就是一个顶层接口

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

nodejs死亡笔记之实战篇---微信公众号的开发(2)

本篇文章继续讲解微信公众号的开发(不使用第三方微信开发模块) 接收消息     在接收消息之前,我们还需要验证与微信平台的签名,上一篇文章已经讲过了,这里不在详述。现在就来讲解一下接收微信平台的消息...

深入理解Java虚拟机笔记---引用类型和对象是否死亡

在JDK1.2以前,Java中的引用定义得很传统:如果reference类型的数值代表的是另外一块内存的起始地址,就称这块内存代表中一个引用。这种定义很纯粹,但太过狭隘,一个对象在这种定义下只有被引用...

死亡笔记1---java语言的四大特性以及方法重载 方法重写的区别以及new创建对象所用到的知识点

一 :开发:其实就是找对象使用,没有对象就创建一个对象.. 找对象--(建立对象)-使用对象,维护对象的关系 java语言的第一特性:封装 什么是封装? public class User { ...

死亡笔记天天动听皮肤N8

  • 2012-11-10 14:52
  • 606KB
  • 下载

死亡笔记ico图标集

  • 2011-08-22 08:21
  • 566KB
  • 下载

nodejs死亡笔记之溯本归源--node4.0+与ECMAScript6新特性(two)

前言:本文接上一篇文章继续讲解nodev4的新特性 Generator基本概念Generator函数有多种理解角度。它是协程在 ES6 的实现,最大特点就是可以交出函数的执行权(即暂停执行)。Gene...

死亡陷阱2-解锁密

  • 2011-12-22 12:04
  • 262KB
  • 下载

死亡鬼屋 2C++

  • 2014-07-24 14:48
  • 1.83MB
  • 下载

nodejs死亡笔记之溯本归源--node4.0+与ECMAScript6新特性(one)

前言: Node v4这个版本是Node和iojs合并后发布的首个稳定版本,并且为开发者带来了大量的ES6语言扩展。现在浏览Node的官网,进入主页会看到两个推荐版本,一个是最新的V6.4.0,另一个...

nodejs死亡笔记之socket.io那些事(附可用来撩妹的聊天功能)

我相信有很多人是看到撩妹才进来的,别急,我们要一步一步来。 websocket简介WebSocket是HTML5开始提供的一种浏览器与服务器间进行全双工通讯的网络技术。现很多网站为了实现即时通讯,所用...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)