*Collection:
1.为抽象类,只能通过子类来实现方法
2.定义泛型
3.与ArrayList有点像
*Collection一些方法:
1.add();
向里面添加元素
2.addAll
将一个集合里面的所有元素都添加
3.clear()
清空
4.remove()
移除 返回值为boolean
5.removeAll()
移除一整个集合 返回值为Boolean
6.contains()
包含元素
7.contiansAll()
包含一整个集合
8.equals
比较 可以比较两个集合想不想等
9.isEmpty()
是否为空集合 返回值为Boolean
10.hashCode
返回此集合的哈希码值
11.retainAll(Collection <?> c)
仅保留此集合中包含在指定集合中的元素
把括号里面的集合保留其他的删除
12.Iterator 类
也是个接口 需要创建对象来实现方法
迭代器进行循环
尽量使用迭代器remove 别使用原数组中的remove
Exception in thread "main" java.util.ConcurrentModificationException
*List集合
1.有序集合(序列)
2.有索引(!!)
3.可以存储重复元素
4.元素存取有序
5.继承自Collection
*List集合特有的方法:
1.add(int index E,element)
在集合中的指定位置插入指定的元素
2.remove(int index)
删除指定索引处的元素 返回被删除的元素
3.set(int index,E element)
修改指定索引出的元素 返回被修改的元素
4.get(int index)
返回指定索引处的元素
5.迭代器(不是特有的)
*List的子类:
1.ArrayList:底层是数组结构实现 查询快 增删慢
2.LinkedList:底层是链表结构实现,查询慢,增删快
*ArrayList:
看底层代码:
elementData: 是存储元素的那个数字
用空构造器创建ArrayList的时候 默认的初始容量是10
什么时候需要扩容:
当初始容量 或者 elementDate这个数组里面的元素个数+1之后 大于 容量了
扩容的长度是多少:
扩大原来的1.5倍 或者是添加元素之后的元素个数的长度, 或者扩大Integer的最大值
*LinkedList:
1.链表!
2.不是抽象类
*LinkedList一些特有的方法:
1.addFirst()
在表头插入
2.addLast
在表尾插入
3.getFirst
获得表头
4.getLast
获得表尾
5.removeFirst
删除并返回第一个元素
6.removeLast
删除并返回最后一个元素
7.push()
压栈
8.pop()
出栈
9.peek()
只拿元素 不删除
*Set:
1.不能有重复元素(equals e 相等的)
2.元素只能有一个是null的
3.无序
4.没有索引
5.底层是由Map实现的
6.由HashSet实现
*HashSet:
对于HashSet中保存的对象,主要要正确重写equals方法和hashCode方法,以保证放入Set对象的唯一性
虽说是Set是对于重复的元素不放入,倒不如直接说是底层的Map直接把原值替代了(这个Set的put方法的返回值真有意思)
HashSet没有提供get()方法,愿意是同HashMap一样,Set内部是无序的,只能通过迭代的方式获得
*Collections:
1.Collection和Collections的区别:
Collection是集合体系的最顶层包含了集合体系的共性
Collections是一个工具类,方法都是用于操作Collection
*一些方法:
1.sort()
排序
2.shuffle()
随机打乱
3.binarySearch()
二分查找 :使用二分查找的要求是必须是有序的 小-->大 大-->小
4.copy(a,b)
把b复制给a
注意:目标列表的长度至少等于源列表的长度
5.fill()
把元素全变成一种
6.reverse()
反转数组
7.disjoint()
如果两个集合没有相同的元素 则返回true
8.frequency()
返回指定集合中指定元素的个数
9.swap()
将指定位置的两个元素互换
*Map:
1.Map接口下的集合与Collection接口下的集合存储数据的形式不同:
*Collection中的集合,元素是孤立存在的,向集合中存储元素采用一个个元素的方式存储
*Map中的集合,元素是成对存在的,每个元素都由键与值两部分组成,通过键可以找到所对应的值
*Collection中的集合称为单列集合,Map中的集合称为双列集合
2.Map中的集合不能包含重复的键,值可以重复,每个键只能对应一个值。
*Map的一些方法:
1.put()
注意:如果传进的新元素的K值与之前的元素相同,则会替换Value 然后把被替换的那个元素返回
先hash比较 再equals比较
2.get()
根据键值获取
3.size()
返回集合中键值对的个数
4.containKey()
是否包含某个K值
5.containValue()
是否包含某个Value
6.isEmpty()
判断是否为空
7.clear()
情空
8.remove()
根据K值删除键值对 返回V值
9.setKey()
把所有的K值打包成Set返回 因为Map的键值不允许是重复的 所以用Set
10.values()
把所有的Value值打包成Collection返回
11.entrySet()
获取键值对 返回值类型为 Set<Map.Entry<K,V>> 类型
*扩容:
static final float DEFAULT_LOAD_FACTOR = 0.75f; 加载因子 和扩容有关
初始的默认容量是 16 什么时候才有这个16 当第一次put时 默认16 最大 2的30次方
实现原理:数组+链表 当链表长度超过8 进行红黑树存储
扩容:什么时候扩容 当前长度达到threshold 的值时进行扩容 无符号右移16位
扩容之后的长度
tableSizeFor方法是一个算法功能,(不考虑大于最大容量的情况)是返回大于输入参数且最近的2的整数次幂的数。比如10,则返回16。
返回给定目标容量的两倍大小的幂.
*File类:
1.文件和目录路径的抽象表示 (表示的是路径)
*File的构造器
1.File()
将一个字符串封装成file对象
2.File(父,子)
*方法:
1.creatNewFile()
指定路径不存在时创建该文件 返回true 否则返回false
2. mkdir()
创建指定的单级文件夹 返回为boolean
单级文件夹:这个文件夹下面没有文件夹了
3.mkdirs
创建多级文件夹 返回值为boolean
当某一层不存在时 都会创建
4.delete
删除文件或者删除单级文件夹
5.exsits
判断指定路径的文件或者文件夹是否存在
返回值为boolean
6.isAbsolute
判断是否为绝对路径 以盘符开头的为绝对路径
7.isDirectory
判断当前路径是否存在
8.isFile
判断当前路径是否为文件
9.isHidden
判断当前路径是否为隐藏文件
10.getAbsoluteFile
获取文件的绝对路径 返回是File对象
11.getAbsolutePath
获取文件的绝对路径 返回的是String
12.getParent
获取当前路径的父级路径 返回的是String
13.getParentFile
获取当前路径的父级路径 返回的是File
14.getName
获取名称
15.getPath
获取File对象种封装的路径
16.lastModified
以毫秒值返回最后修改的时间
17.length
返回文件的字节数
18.renameTo
给文件改名字
19.String[] list
以string数组返回当前路径下所有的文件和文件夹的名称
20.File[] listFiles()
以File 数组返回当前路径下所有的文件和文件夹的名称
21.File[] listRoots()
获取计算机所有的盘符