博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数组和集合
阅读量:5268 次
发布时间:2019-06-14

本文共 3259 字,大约阅读时间需要 10 分钟。

数组部分

  • 1、数组定义:类名[] 数组名 ,数组中存放该类型的数据;


  • 2、二维数组:

    • 二维数组的定义中,第一个括号必须有数值,不能为空,但可为0;


  • 3、数组的初始化方式:

  • 静态初始化

int [] a = {1,2,5,7,3};    //静态初始化基本类型数组User[] b = {    new User(01,"张三"),    new User(02,"李四"),    new User(03,"王五")};                     //静态初始化引用类型数组;
  • 动态初始化

int[] a = new int[2];   //动态初始化数组,先分配空间;a[0] = 1;//给数组元素赋值;a[1] = 2;//给数组元素赋值;
  • 默认初始化

int[] a = new int[2];   //默认值:0,0;boolean[] b = new boolean[2];   //默认值:false,false;String[] s = new String[2];     //默认值:null,null;

  • 4、二维数组的合法初始化:

// 数据类型[][] 数组名;int [][] table = new int[2][2];int [][] table = new int[2][];int [] table [] = new int[2][2];int [] table [] = new int[2][];

  • 5、数组和集合的区别:

  • (1)数组长度固定且不可变;

  • (2)集合可以在运行时动态变化;


  • 6、java中的集合框架体系结构:

image


集合部分

  • 1、迭代器遍历集合:

Interator it = List.interator();while(it.hasNext()){    }

  • 2、在没有引入泛型的概念之前(Java SE 1.5引入泛型的概念),对象存入集合都变成Object,取出时需要类型转换;


  • 3、ArrayList和LinkedList

    • ArryList和LinkedList都实现了List接口,ArrayList的内存结构是数组,本质是顺序存储的线性表,插入和删除操作都会引起后续元素移动,效率低,但是随机访问效率高;

    • LinkedList的内存结构是双向链表存储的,链式存储结构插入和删除效率高,不需要移动,但是随机访问效率低,需要从头开始向后依次访问

  • 4、HashTable和HashMap:

    • HashMap和Hashtable两个类都实现了Map接口,二者保存K-V对(key-value对);

    • HashTable不允许null值(key和value都不可以),HashMap允许null值(key和value都可以);

    • Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步;

    • 由所有HashMap类的“collection 视图方法”所返回的迭代器都是快速失败的:在迭代器创建之后,如果从结构上对映射进行修改,除非通过迭代器本身的 remove 方法,其他任何时间任何方式的修改,迭代器都将抛出ConcurrentModificationException。Hashtable和HashMap的区别主要是前者是同步的,后者是快速失败机制保证.

  • 5、 关于HashMap的一些说法:

    • a) HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。HashMap的底层结构是一个数组,数组中的每一项是一条链表。
    • b) HashMap的实例有俩个参数影响其性能: “初始容量” 和 装填因子。
    • c) HashMap实现不同步,线程不安全。 HashTable线程安全
    • d) HashMap中的key-value都是存储在Entry中的。
    • e) HashMap可以存null键和null值,不保证元素的顺序恒久不变,它的底层使用的是数组和链表,通过hashCode()方法和equals方法保证键的唯一性
    • f) 解决冲突主要有三种方法:定址法,拉链法,再散列法。HashMap是采用拉链法解决哈希冲突的。
    • 注: 链表法是将相同hash值的对象组成一个链表放在hash值对应的槽位;

      • 用开放定址法解决冲突的做法是:当冲突发生时,使用某种探查(亦称探测)技术在散列表中形成一个探查(测)序列。 沿此序列逐个单元地查找,直到找到给定 的关键字,或者碰到一个开放的地址(即该地址单元为空)为止(若要插入,在探查到开放的地址,则可将待插入的新结点存人该地址单元)。
      • 拉链法解决冲突的做法是:
        • 将所有关键字为同义词的结点链接在同一个单链表中 。若选定的散列表长度为m,则可将散列表定义为一个由m个头指针组成的指针数 组T[0..m-1]。凡是散列地址为i的结点,均插入到以T[i]为头指针的单链表中。T中各分量的初值均应为空指针。在拉链法中,装填因子α可以大于1,但一般均取α≤1。拉链法适合未规定元素的大小。
  • 6、 Hashtable和HashMap的区别:

    • a) 继承不同。

public class Hashtable extends Dictionary implements Map

public class HashMap extends AbstractMap implements Map

    • b) Hashtable中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的。在多线程并发的环境下,可以直接使用Hashtable,但是要使用HashMap的话就要自己增加同步处理了。
    • c) Hashtable 中, key 和 value 都不允许出现 null 值。 在 HashMap 中, null 可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为 null 。当 get() 方法返回 null 值时,即可以表示 HashMap 中没有该键,也可以表示该键所对应的值为 null 。因此,在 HashMap 中不能由 get() 方法来判断 HashMap 中是否存在某个键, 而应该用 containsKey() 方法来判断。
    • d) 两个遍历方式的内部实现上不同。Hashtable、HashMap都使用了Iterator。而由于历史原因,Hashtable还使用了Enumeration的方式 。
    • e) 哈希值的使用不同,HashTable直接使用对象的hashCode。而HashMap重新计算hash值。
    • f) Hashtable和HashMap它们两个内部实现方式的数组的初始大小和扩容的方式。HashTable中hash数组默认大小是11,增加的方式是old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。
    • 注: HashSet子类依靠hashCode()和equal()方法来区分重复元素。

      • HashSet内部使用Map保存数据,即将HashSet的数据作为Map的key值保存,这也是HashSet中元素不能重复的原因。而Map中保存key值的,会去判断当前Map中是否含有该Key对象,内部是先通过key的hashCode,确定有相同的hashCode之后,再通过equals方法判断是否相同。
  • 7、hashMap在单线程中使用大大提高效率,在多线程的情况下使用hashTable来确保安全;

    • hashTable中使用synchronized关键字来实现安全机制,synchronized是对整张hash表进行锁定即让线程独享整张hash表,在安全同时造成了浪费;
    • concurrentHashMap采用分段加锁的机制来确保安全。

转载于:https://www.cnblogs.com/caoleiCoding/p/8974575.html

你可能感兴趣的文章
URAL 1203 Scientific Conference 简单dp 难度:0
查看>>
VS调试快捷键
查看>>
实例游戏内存修改器----CUI版本模拟
查看>>
ubuntu安装MySQL笔记
查看>>
计算机中丢失 msvcr110.dlll
查看>>
Python-Tkinter几何布局管理
查看>>
File Zilla搭建FTP服务器时出现的报错
查看>>
03 持续集成和部署/基础设施 - DevOps之路
查看>>
《剑指offer(第二版)》面试题64——求1+2+...+n
查看>>
前端早读课:JavaScript函数的6个基本术语
查看>>
吃糖果
查看>>
PopupWindow-----点击弹出 PopupWindow 初始化菜单
查看>>
介绍MFSideMenu左右滑动控件的使用
查看>>
【转】[Asp.net]常见数据导入Excel,Excel数据导入数据库解决方案,总有一款适合你!...
查看>>
减小安装包之图片处理
查看>>
LeetCode-42 Trapping Rain Water
查看>>
20131008
查看>>
安装weblogic的步骤10.3.0.0
查看>>
给我自己的时间加个小安排
查看>>
田小计划:图解Python深拷贝和浅拷贝
查看>>