HashMap和TreeMap用法都一样,只是存储结构不一样。
键值对的键必须使用数据类型的封装类型(假如是int,要用Integer)
HashTable与HashMap用法几乎一致,区别就是线程安全性问题:前者较安全,性能略低。
HashMap和TreeMap用法都一样,只是存储结构不一样。
键值对的键必须使用数据类型的封装类型(假如是int,要用Integer)
HashTable与HashMap用法几乎一致,区别就是线程安全性问题:前者较安全,性能略低。
1.HashMap集合类;//HashMap里面保存的是键值对(一个键对应一个值)
HashMap map=new HashMap();
通过get得到siki这个键,进而得到56这个值(把这个值传递过来)//通过key取得value
所以:key不能相同。但是:value可以相同。一旦key相同,会把前面key所对应的value取代掉。
2.map.keySet();//会把map的所有key得到放在set里面
把所有的value输出来都可以:
———————————————————
凡是返回类型是set类型,值value是不可以重复(一旦重复系统就会自动去重或实现替换(HashMap)),返回类型是collection类型可以重复(ArrayList\Vector\LinkedList)。
集合存储ArrayList自定义类的类型数据Student
遍历的时候因为里面都是student类型,所以:
for(student temp:al){}
TreeSet:也是无序,不重复。
HashSet集合类;
HashSet set=new HashSet();
集合类里:
ArrayList\LinkedList\Vector可以添加重复数据,有序的(按照添加顺序排序);
但是,HashSet不可以添加重复数据,无序。(一旦添加了重复数据,内部系统会自动进行去chong)
因为每次进行数值运算都要对非int类型数据进行强制类型转换,所以引入了泛型:
ArrayList<Integer>al=new ArrayList<Integer>();//声明了该集合只能存储Integer类型:int类型,所以传递数据的时候也只能传递int类型数据。
LinkedList跟Victor和ArrayList用法没区别,不过多了在数组的前、末尾添加数据的两个方法。
用法跟ArrayList一样,区别在于线程安全:
Victor的线程安全好于ArrayList
1.遍历数组:i<oArray.length
遍历集合:i<ArrayList.size
2.遍历还可以获取一个遍历器:
al.iterator();//因为它返回的是iterator对象,所以我们定义一个iterator去接收它。
Iterator iterator=al.iterator();
3.iterator.next();//会在每次调用完一个对象后,调用下一个对象。
4.加强版for循环遍历:
for(Object o:al){
System.out.println(o);}
1.al.remove(1);//把索引为1的数据删除
al.remove("小明");//把小明这个数据删除
2.System.out.println(al.isEmpry());
System.out.println(al.isContains(""));
3.
把一个集合类转换成数组类型。
4.因为ArrayList里面的数组都是object类型,get返回的是object类型,故不能直接做运算:
1.把一个集合传递给另一个集合:
ArrayList al=new ArrayList();
ArrayList al2=new ArrayList();
al.addAll(al2);
2.al.add(0,""Jack);//把Jack添加到索引为0的位置,原索引为0的数据索引变成1。
3.for(int i=0;i<al.size();i++){}//对集合里面的数据进行遍历
System.out.print(al.get(i)+" ");
数组在创建的时候需要指定数组长度,但是ArrayList在创建的时候并不需要指定长度:
ArrayList a1=new ArrayList();
a1.add(“小明”);//索引为0的时候输出的值
a1.add(“小红”);//索引为1的时候输出的值
System.out.println(a1.get(0));
泛型使用的很多的
5.14 3.3
5.13 4.29 3.2
OutputStreamwriter//OutputStreamwriter是包装流
IntpurStreamreader
第三章任务51
BufferedInputStream(缓冲区输入流)
BufferdeOutPutStream(缓冲区输出流)
while((data=input.read())!=-1)){ output.write(data); }//复制
while((length =input.read(data))!=-1){ output,write(data,0,length); }//拷贝
currentTimeMills()//获取拷贝时间
缓冲区数据写到硬盘上的三种情况:
1、缓冲区满的时候(一般不会满)
2、当调用close的时候
3、当调用刷新缓冲区之后
写了缓冲区之后,数据不会直接写到里面,会先写进缓冲区
输入输出流
一般只用效率高的数组方式
而字节方式一般了解就行
109和1毫秒,当然是数组效率更高
设置数组范围1024效率是46毫秒
设置数组范围2048效率是19毫秒
一般是使用while循环条件来判断,比较简洁