文件io流操作,如果是fileinputstream,必须读的文件存在再行。fileoutputStream文件不用存在写入磁盘可以自动生成。
文件读到最后的标志是读取的内容返回的是-1。如果不等于-1说明任然有值,可以继续。等于-1说明到了文件末尾。
FileInputStream fis = new FileInputStream("04-JavaScript高级资料.zip");// 读文件首先的保证文件存在
FileOutputStream fos = new FileOutputStream("c.zip");//往硬盘写如果没有的话会自动创建文件
int b;//一个一个读,存放每次读到的内容
while((b = fis.read()) != -1) {//等于-1说明到了文件结束
fos.write(b);//边读边写
}
fos.close();
fis.close();
1.list
2.set
HashSet:存入的内容必须重写HashCode方法和equals()方法。一般自定义对象需要我们自己重写。一般String/Integer等底层内部重写了相关方法。
TreeSet:二叉树,这个是可以用来排序的。但是存入的内容必须重写complaerTo()方法。即实现Compable接口。传入匿名内部对象,实现比较方法()。
其实编码中常见的开始日期结束日期大小比较就可以使用Integer的complaerTo()方法。
TreeSet集合是用来对象元素进行排序的,同样他也可以保证元素的唯一
* 当compareTo方法返回0的时候集合中只有一个元素
* 当compareTo方法返回正数的时候集合会怎么存就怎么取
* 当compareTo方法返回负数的时候集合会倒序存储
如果想让他保存重复的元素让其返回为1即可。为正。为0只保存一个。
3.map
LinkedHashMap可以保证怎么存就怎么取。
面试题
* HashMap和Hashtable的区别
* 共同点:
* 底层都是哈希算法,都是双列集合
* 区别:
* 1,HashMap是线程不安全的,效率高,JDK1.2版本
* Hashtable是线程安全的,效率低,JDK1.0版本的
* 2,HashMap可以存储null键和null值
* Hashtable不可以存储null键和null值。
数组转换成集合
* 数组转换成集合虽然不能增加或减少元素,但是可以用集合的思想操作数组,也就是说可以使用其他集合中的方法。
* List list = Arrays.asList(arr); //将数组转换成集合
//list.add(“d”); //不能添加
- A:泛型概述
* B:泛型好处
* 提高安全性(将运行期的错误转换到编译期)
* 省去强转的麻烦
* C:泛型基本使用
* <>中放的必须是引用数据类型
* D:泛型使用注意事项
* 前后的泛型必须一致,或者后面的泛型可以省略不写(1.7的新特性菱形泛型) 。
总结:和Hash相关必须重写HashCode()和equal方法。如果HashCode()返回值不同就不再调用equals()。如果相同接着调用equals()。
和Tree相关必须实现Compalable接口或者构造方法传入new complor()匿名对象重写ComplaleTo()方法。如果返回为-1放到左边,如果为0只保存一次,如果为1放到右边。可以保存重复。Tree主要用于排序,所以需要重写排序规则。
TreeMap<Student, String> tm = new TreeMap<>(new Comparator<Student>() {
@Override
public int compare(Student s1, Student s2) {
int num = s1.getName().compareTo(s2.getName()); //按照姓名比较
return num == 0 ? s1.getAge() - s2.getAge() : num;
}
});
-
- A:Map集合的功能概述
- a:添加功能
- V put(K key,V value):添加元素。
- 如果键是第一次存储,就直接存储元素,返回null
- 如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值
- V put(K key,V value):添加元素。
- b:删除功能
- void clear():移除所有的键值对元素
- V remove(Object key):根据键删除键值对元素,并把值返回
- c:判断功能
- boolean containsKey(Object key):判断集合是否包含指定的键
- boolean containsValue(Object value):判断集合是否包含指定的值
- boolean isEmpty():判断集合是否为空
- d:获取功能
- Set<Map.Entry<K,V>> entrySet():
- V get(Object key):根据键获取值
- Set keySet():获取集合中所有键的集合
- Collection values():获取集合中所有值的集合
- e:长度功能
- int size():返回集合中的键值对的个数.
- a:添加功能
- A:Map集合的功能概述
-
Collection
-
List(存取有序,有索引,可以重复)
-
ArrayList
-
底层是数组实现的,线程不安全,查找和修改快,增和删比较慢
-
LinkedList
-
底层是链表实现的,线程不安全,增和删比较快,查找和修改比较慢
-
Vector
-
底层是数组实现的,线程安全的,无论增删改查都慢
-
如果查找和修改多,用ArrayList
-
如果增和删多,用LinkedList
-
如果都多,用ArrayList
-
Set(存取无序,无索引,不可以重复)
-
HashSet
-
底层是哈希算法实现
-
LinkedHashSet
-
底层是链表实现,但是也是可以保证元素唯一,和HashSet原理一样
-
TreeSet
-
底层是二叉树算法实现
-
一般在开发的时候不需要对存储的元素排序,所以在开发的时候大多用HashSet,HashSet的效率比较高
-
TreeSet在面试的时候比较多,问你有几种排序方式,和几种排序方式的区别
- Map
-
HashMap
-
底层是哈希算法,针对键
-
LinkedHashMap
-
底层是链表,针对键
-
TreeMap
-
底层是二叉树算法,针对键
-
开发中用HashMap比较多
-