`
Jacular
  • 浏览: 178776 次
  • 性别: Icon_minigender_1
  • 来自: 云南
社区版块
存档分类
最新评论

java集合

    博客分类:
  • java
阅读更多
第一类
Collection(父接口)
list(接口)        Set(接口)
Arraylist         HashSet
LinkeList         TreeSet
第二类
Map接口
HashMap   TreeMap


关于List接口  可以容纳重复对象
ArrayList --->  数组列表
ArrayList底层的容器就是Object类型的数组
默认大小是10
当数组大小不够时,扩容1.5倍
ArrayList中对数组中的元素经常经常进行插入或者移除操作效率低
ArrayList线程不同步
ArrayList序列化有着特殊的操作(以后会讲,面试常问)

LinkedList--->  链表结构
双向链表结构,基本语法和ArrayList相似
简单的去认识一下源码的构造方法,和add方法,就能看懂是一个链表结构
如果经常在元素中插入数据移除数据效率会高一些
并且LinkedList提供了很多操作头尾的方法,ArrayList是没有的
addFirst
removeFirst
addLast
removeLast
getFirst
getLast等方法


jdk老版本中遗留的Vector
类似与ArrayList   面试中常会比较ArrayList和Vector的区别
Vector是同步的,效率较低,安全性高
扩容的时候直接扩位2倍
遍历的方式



关于Set接口  不能容纳重复对象
HashSet
明确重复的定义:
   跟现实应用中一样,要重写equals方法和hashCode方法
  重写的时候一定要确认什么样的属性才能唯一标识这个对象,用这些
  属性来生产equals和hashCode方法
了解对象是如何放入了HashSet集合中
了解什么情况下会倒置对象从HashSet集合中移除不了.


TreeSet
TreeSet中如果容纳多个对象,这组对象必须能够
根据某种规则进行排序
比较规则有两种方式
1.加入对象的类需要实现Comparable接口
   接口的实现方法中定义排序规则
   比较规则的实现如果返回0  就认为是同一个对象,就不加入了

TreeSet
比较规则1:Comparable
比较规则2:TreeSet 的构造函数可以传入一个参数Comparator
        对于没有实现Comparable接口的类来说,也有比较规则了
        对于已经实现了Comparable接口的类来说,可以再通过这种方式来改变排序规则
       
HashSet底层用的HashMap来实现
TreeSet底层是用的TreeMap来实现的 


封装类
基本的数据类型不是面向对象的
byte  short int      char      long boolean float double
对这些基本数据类型也有对应的类,这些对应的类中,封装了对这个数据类型的一些操作
Byte  Short Integer  Character Long Boolean Float Double



Map(key,value)
HashMap
1.基本语法  添加,遍历的方式
2.存储结构(了解源码)
HashMap如果没有给初始大小初始大小16
key value都会被封装成Entry的对象(大小就是开辟的这个类型的数组的大小)
如果初始化给定了大小,这个大小不是2的次方数,它会找到比这个初始大小要大的最接近的2的次方数
loadFactor这个属性是加载因子,假设加载因为是0.75  那么当容量达到 初始大小*0.75时就会扩容

如何往Map中存放数据
  拿到key对象得到hashCode值在经历一次hash算法得到一个数据
拿这个数据在与map的大小-1(数组的大小)  作&运算
一个数%2的次方数  = 这个数& 2的次方数-1  后面的效率高很多,为什么初始大小要是2的次方数的原因
把&得到的结果作为数组的元素位置把对象存放入数组

为什么要把hashCode值在经历一次hash算法,这样可以减少冲突率
如果这个数组位置上有元素了,会去进行equals比较,如果相同则覆盖
如果equals不相同呢? 会以链表结构跟在这个位置元素的后面
HashMap是一个数组加链表的结构
我们应该把元素尽量的放入数组而不是链表,因为一旦放在同一个位置,就意味着要
遍历链表中的每一个元素,进行比较,效率很低.HashMap本身也对这个做了处理,就是key的hashCode再一次进行
hash算法,就是位了避免冲突率.
我们需要重写equals和hashCode只要遵循之前的原则即可.


HashMap比较经典的用法是计数
   先取,没有就放一个进去,计数为1
             有取出value+1再放入
            
实际开发中,最好估算一下Map的大小然后给一个初始大小
一旦扩容,所有元素的位置都要重新计算,效率很低.
分享到:
评论

相关推荐

    java集合思维导图

    java集合 java集合思维导图 java集合总结

    【Java】Java集合框架思维导图。

    xmind格式的Java集合框架学习导图,包括Collection接口/Map接口以及具体实现类。 同样包含大厂面试题,也在导图中有所体现。 能学到什么: 更加成体系的知识框架,更加全面的、系统的知识。 思维导图: 思维导图具有...

    java 集合练习题

    键盘录入5个学生信息(姓名,语文成绩,数学成绩,英语成绩),按照总分从高到低输出到控制台java 集合练习题

    java集合习题及答案

    java集合基础习题及答案,

    Java集合整体讲解

    Java集合整体讲解,其中包含了Collection,Map,Iterator和一些工具类,以及集合整体大框架

    java集合知识大全

    java 集合 List arrayList vector map set

    Java集合排序及java集合类详解.pdf

    Java 集合排序 及java集合类 详解.pdf

    Java基础篇:Java集合.pdf

    该文档主要详细总结了Java集合的相关知识,包括Collection和Map接口、Collection接口的子接口List和Set接口以及具体的实现类、存储原理等;Map接口的子接口HashMap、LinkedHashMap、TreeMap、Properties等

    Java 集合排序及java 集合类详解

    Java 集合排序及java 集合类详解,Java里面最重要、最常用也就是集合那部分了,能够用好集合和理解好集合对于做Java程序的开发拥有无比的好处。本教程详细解释了关于Java中的集合是如何实现的, 以及他们的实现原理...

    Java集合框架总结

    Java集合框架总结Java集合框架总结Java集合框架总结Java集合框架总结Java集合框架总结Java集合框架总结

    java集合框架面试题

    内含大量java集合框架方面常被面试官问到的经典面试题。

    Java集合排序及java集合类详解

    Java集合排序及java集合类详解,对list,set,map等java集合进行详细讲解

    Java集合框架.ppt

    集合是将多个元素组成一个单元的...Java集合框架,为我们提供了一套性能优良、使用方便的接口和类,我们不必再重新发明轮子,只需学会如何使用它们,就可以处理实际应用中出现的问题了Java集合框架位于java.util包中

    java集合资料整理

    关于java集合资料的整理 集合接口:6个接口,表示不同集合类型,是集合框架的基础。 抽象类:5个抽象类,对集合接口的部分实现。可扩展为自定义集合类。 实现类:8个实现类,对接口的具体实现。 在很大程度上,...

    Java集合框架详解

    Java集合框架详解Java集合框架详解Java集合框架详解

    java集合框架图

    java集合框架图java集合框架图java集合框架图java集合框架图java集合框架图

    Java集合详解,详细讲解java的集合类

    Java集合详解,详细讲解java的集合类,对java集合类的最详细的讲解。我自己的总结,保证大家看了很有收获

    java集合java集合java集合java集合java集合

    java集合

    java 集合分组与排序

    java 集合分组排序帮助类有好的意见可以互相交流不甚感激

Global site tag (gtag.js) - Google Analytics