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默认盘的路径下