HashMap与ArrayList

Collection 接口

Collection 接口是在整个Java 类集中保存单值的最大操作父接口,里面每次操作的时候都只能保存一个对象的数据。

[if !supportLists]l  [endif]public boolean add(E e) :把给定的对象添加到当前集合中 。

[if !supportLists]l  [endif]public void clear():清空集合中所有的元素;

[if !supportLists]l  [endif]public boolean remove(E e) : 把给定的对象在当前集合中删除。

[if !supportLists]l  [endif]public boolean contains(E e) : 判断当前集合中是否包含给定的对象。

[if !supportLists]l  [endif]public boolean isEmpty() : 判断当前集合是否为空。

[if !supportLists]l  [endif]public int size() : 返回集合中元素的个数。

[if !supportLists]l  [endif]public Object[] toArray():把集合中的元素,存储到数组中


List 接口:

java.util.List 接口继承自 Collection 接口

在List集合中允许出现重复的元素,所有的元素是以一种线性方式进行 存储的,在程序中可以通过索引来访问集合中的指定元素(元素的存入顺序和取出顺序一致)

[if !supportLists]l  [endif]public void add(int index, E element) : 将指定的元素,添加到该集合中的指定位置上。

[if !supportLists]l  [endif]public E get(int index) :返回集合中指定位置的元素。

[if !supportLists]l  [endif]public E remove(int index) : 移除列表中指定位置的元素, 返回的是被移除的元素。

[if !supportLists]l  [endif]public E set(int index, E element) :用指定元素替换集合中指定位置的元素,返回值的更新 前的元素

ArrayList(动态扩容):

优缺点:增删慢,查找快

刚创建的ArrayList()数组长度为零,当给它添加数值时,才变为容量为10的数组。每次扩容变为原来的1.5倍

当调用添加方法方法时(add())返回值永远为true

当使用foreach循环时,千万记得要在ArrayList()这里加泛型,错了三次了

遍历集合的方法

For循环,foreach,LinkedList,Iterator迭代器

LinkedList(链表结构):

优缺点:增删快,查找慢

[if !supportLists]l  [endif]public void addFirst(E e) :将指定元素插入此列表的开头。

[if !supportLists]l  [endif]public void addLast(E e) :将指定元素添加到此列表的结尾。

[if !supportLists]l  [endif]public E getFirst() :返回此列表的第一个元素。

[if !supportLists]l  [endif]public E getLast() :返回此列表的后一个元素。

[if !supportLists]l  [endif]public E removeFirst() :移除并返回此列表的第一个元素。

[if !supportLists]l  [endif]public E removeLast() :移除并返回此列表的后一个元素。

[if !supportLists]l  [endif]public E pop() :从此列表所表示的堆栈处弹出一个元素。

[if !supportLists]l  [endif]public void push(E e) :将元素推入此列表所表示的堆栈。

[if !supportLists]l  [endif]public boolean isEmpty() :如果列表不包含元素,则返回true

Vector类和ArrayList类的区别:

NO区别点ArrayListVector

1时间新的类,JDK1.2之后出的旧的类是在JDK1.0定义的

2性能性能较高,异步处理性能较低,同步处理

3输出支持Iterator、ListIterator输出不仅支持Iterator、ListIterator,还支持Enumeration

Iterator迭代器:

只要是碰到了集合,则输出的时候想都不想就使用 Iterator 进行输出。

ListIterator是Iterator的子:使用方法差不多,而且是同一个指针,如果要取出前一个元素,也要判断是否存在通过hasPrevious()

public Iterator iterator() : 获取集合对应的迭代器,用来遍历集合中的元素的。


迭代:即Collection集合元素的通用获取方式。在取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,继续在判断,如果还有就再取出出来。一直把集合中的所有元素全部取 出。这种取出方式专业术语称为迭代。

方法:不论是取出还是删除都需要hasNext()的指针指到含有元素的下标位置,起始位置在下标0上边

NO.方法名称类型描述

1Boolean hasNext()普通是否有下一个元素

2E next()普通取出内容

3Void remove()普通删除当前内容

Iterator<String>

iter = new all.iterator();创建对象

While(iter.hasNext()){判断是否有元素

String str = iter.next();取出元素

System.out,print(str+”、”)

}

以上的操作是 Iterator 接口使用最多的形式,也是一个标准的输出形式。

批量注释:CTRL+SHIFT+/

换行:/+回车

foreach:

用于迭代数组 或 集合(Collection)

语法:

For(数据类型 变量名:集合或数组名){要打印的}

Set接口:

Set 接口也是 Collection的子接口,与 List 接口最大的不同在于,Set 接口里面的内容是不允许重复的

Set 接口并没有对Collection 接口进行扩充,基本上还是与 Collection 接口保持一致。因为此接口没有 List 接口中定义 的 get(intindex)方法,所以无法使用循环进行输出

散列存放:HashSet:

HashSet 属于散列的存放类集,里面的内容是无序存放的。

TreeSet:

关于 TreeSet 的排序实现,如果是集合中对象是自定义的或者说其他系统定义的类没有实现 Comparable 接口,则不能实现 TreeSet 的排序,会报类型转换(转向 Comparable 接口)错误。 换句话说要添加到 TreeSet 集合中的对象的类型必须实现了 Comparable 接口

TreeSet 的集合因为借用了 Comparable 接口,同时可以去除重复值


Map:

Map集合存储的是一个个 键值对 数据(键不重复)

Map 本身是一个接口,所以一般会使用以下的几个子类:HashMap、TreeMap、Hashtable

哈希表(HashMap)概述:

散列表(哈希表):HashCode对散列表进行优化。

哈希表:对象数组+链表

先拿到对象的哈希值,将其与哈希表长度16取余,然后根据取余的数分布在0-15之间。

当有两个相同下标时,后来的会放在这个值下面,该值所在的下标位置变为链表。


哈希桶中的数据量大于   

8时,从链表转换为红黑二叉树,当哈希桶中的数据量减少到6时,从红黑二叉树转换为链表。

初始桶容量16

散列因子0.75 当这个数组中75%的桶装了数据时,对桶进行扩容,扩容的大小为原长度的二倍,同时下次过来的哈希值哈希值与32进行取余

HashMap/Hashtable/ConcurrentHashMap区别:

HaspMap(不保证存储顺序):线程不安全,效率高;(壮汉一起喝水)

Hasptable:线程安全,效率低;(壮汉排队喝)

ConcurrentHashMap:采用分段机制,保证线程安全,,效率又比较高(相同水桶排队喝,不同水桶一起喝)。

TreeMap:会自动计算排序。

LinkedHashMap:便利了HashMap同时保证顺序

HashMap与Hashstable的区别:

No区别点HashMapHashtable

1时间新的操作类旧的操作类

2性能异步处理,性能高同步处理性能低

3Null允许设置为null不许设置,否则将出现空指针

HashCode用属性来计算哈希值

File(常用的三种构造方法)

格式:

File

file = new File(“C://1.txt”);

1、file.createNewFile();//此方法创建文件

2、file.mkidr();//此方法创建文件夹

若无此文件,则创建

方法:

file.delete();//用于删除该对象的文件

getAbsolutePath();获取文件所在文件夹的路径名

getName();获取文件名称

getPath();获取文件路径

getParent();获取父的文件夹名,就是上层文件名

getParentFile();获取父文件夹对象

length();获取文件长度,按字节走

exists();判断文件是否存在

isDirectory();判断是否是文件夹

isFile();判断是否是文件

listFiles();获取文件夹下的所有文件对象,返回文件数组

mkdirs();创建一串文件夹,例如:c://ha//haha

renameTo();将文件存入新的文件夹,例如:c://ha

文件遍历:

格式:

File e = File(“e:\\”);//e盘目录下的文件

File[] files = e.listFiles();获取,并赋给files

ListFiles(files);传递给方法ListFiles()

Public static voidListFiles(File[] files){

       If(files!=null&& files.length>0){//判断文件是否是否为空

              for(Filefile:files){

              if(file.isFile()){//判断是否是文件

//判断文件后缀是否为要删除的

if(file.getName().ensWith(“.avi”)){

       //判断文件大小

if(file.length()>200*1024*1024){

                     file.delete();//删除文件

                     System.out.pirnt(“文件已删除”)

}

}

}else{

         File[] files2 = file.ListFiles();

ListFiles(files);//递归直到遍历所有文件

}

}

}

}

两参构造

File(File parent,String child)这里的parent指文件夹名称,child指文件名

File(String parent,String child)这里parent放的是子文件所在文件夹的路径名,如:c://haha

无参构造

File(String pathnames),里面放路径名

路径分隔符与名称分隔符:

PathSeparator; separator;

相对路径与绝对路径:

绝对路径:一个完整的路径,例如:c://a.txt

相对路径:在java代码中是相对于项目目路径,是不完整的便捷路径,在Java开发中常用,例如:a.txt

在java默认盘的路径下

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。