📄 java7.txt
字号:
sd 0804 Javaday7 2008年6月18日集合:corejava中常用的1.String/StringBuffer2. 集合容器集合就是存放对象的对象(对象容器)集合不能放基本类型,但可以放封装类数组和集合的差别:数组: 1. 长度不可变(固定) 2.数组只支持单类型的元素集合框架: 1.接口:定义了方法的框架 2.子类:方法的具体实现 3.方法所有的集合框架在java.util包里集合包括collection(集合接口)和map(映射)List:有放入顺序(会记录进入顺序),允许重复元素的集合set:无放入顺序,不允许重复元素map:以键值对的方式去存放元素(两个对应的元素key和value),无放入顺序,key不允许重复,value允许重复所有集合长度都是可变的四种存放方式:数组,List,Set,Map1.年龄(数组)2.同学(List)3.姓名(Set)4.一个同学的信息(Map)1.所有linked打头的底层基于链表,特点:增删快,查找慢2.ArrayList(JDK1.3之后)和Vector ArrayList:高效,不能直接支持并行操作(StringBuffer,StringBuilder),要进行中间处理 Vector:低效,能直接支持并行操作3.HashMap和Hashtable的区别 HashMap:高效,不支持并行操作,允许空值 Hashtable:低效,支持并行,不允许空值(key和value都不能为空)增加:add/addAll删除:clear()/remove()/removeAll()取:get()查找:indexof()元素个数:size()List: 设置:setXXX 取出:getXXX 增加:addXXX,insertXXX,appendXXX,putXXX 删除:removeXXX,deleteXXX泛型:在类名后面写上<类型>,如 List<String> list = new ArrayList<String>();--------------------------------------------------------------------------package com.tarena.day07.list;import java.util.List;import java.util.ArrayList;public class TestList { public static void main(String[] args) { List<String> list = new ArrayList<String>(); //多态,泛型(5.0新特性) list.add("one"); list.add("two"); //list.add(3); //实际加入的是Integer,自动装箱 list.add("four"); list.remove(1); for (int i = 0; i < list.size(); i++) { //Object obj = list.get(i); //多态,如果用泛型则不用这句 String obj = list.get(i); System.out.println(obj); //多态+重写 } }}--------------------------------------------------------------------------Capacity:--------------------------------------------------------------------------package com.tarena.day07.list;import java.util.ArrayList;import java.util.List;public class TestCapacity { public static void main(String[] args) { List<String> list = new ArrayList<String>(100000); String temp = "abc"; long start = System.currentTimeMillis(); for (int i = 0; i < 100000; i++) { list.add(temp); } long end = System.currentTimeMillis(); System.out.println(end-start); }}--------------------------------------------------------------------------set只能借助迭代器取出set: 增加:add/addAll 删除:remove/clear 取出:iterator()->Iterator while(.hasnext()){ .next()}set也支持泛型--------------------------------------------------------------------------package com.tarena.day07.set;import java.util.HashSet;//import java.util.Iterator;import java.util.Set;public class TestSet { public static void main(String[] args) { Set<String> set = new HashSet<String>(); set.add("one"); set.add("two"); set.add("three"); set.add("three"); set.add("four"); for(String s : set){ //只有5.0才支持,6.0都不支持,底层基于迭代器实现,所有的集合和数组都支持,取代下面的代码 System.out.println(s); }// Iterator<String> it = set.iterator();// while(it.hasNext()){// String obj = it.next();// System.out.println(obj);// } }}输出结果:twoonethreefour--------------------------------------------------------------------------5.0新引入的循环,只有5.0支持: for each循环 for(元素类型 变量名:集合或数组的对象){ 直接使用变量名. } 底层还是由迭代器实现HashSet() 构造一个新的空集合,其底层 HashMap 实例的默认初始容量是 16,加载因子是 0.75。 加载因子实际上就是当元素到了16*0.75的大小时就会扩容,扩容的时候大部分是以2倍大小HashSet如何判定重复?1.先判断HashCode()2.判断equals()--------------------------------------------------------------------------package com.tarena.day07.set;public class Person { private int id; private String name; @Override public int hashCode(){ System.out.println("hash" + id); return id; } @Override public boolean equals(Object obj){ if(obj==null){ return false; }else if(obj instanceof Person){ Person p = (Person)obj; System.out.println("equals" + id); return this.id == p.id;// return true; } return false; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; }}--------------------------------------------------------------------------package com.tarena.day07.set;import java.util.HashSet;import java.util.Set;public class Test { public static void main(String[] args) { Set<Person> set = new HashSet<Person>(); Person p1 = new Person(); p1.setId(1); p1.setName("zhang"); Person p2 = new Person(); p2.setId(2); Person p3 = new Person(); p3.setId(3); Person p4 = new Person(); p4.setId(1); set.add(p1); set.add(p2); set.add(p3); set.add(p4); System.out.println(set);//输出的时候会调用toString,也会调用hashCode for (Person p : set) { System.out.println(p.getName()); } }}输出结果:hash1hash2hash3hash1equals1hash1hash2hash3[com.tarena.day07.set.Person@1, com.tarena.day07.set.Person@2, com.tarena.day07.set.Person@3]zhangnullnull--------------------------------------------------------------------------SortedSet 可排序,不代表放入顺序,是按算法排序ArrayList:基于数组HashSet:基于HashMap,Hash算法TreeSet:基于二叉树--------------------------------------------------------------------------package com.tarena.day07.set;import java.util.TreeSet;public class TestTreeSet { public static void main(String[] args) { TreeSet<Integer> ts = new TreeSet<Integer>(); ts.add(5); ts.add(3); ts.add(14); ts.add(8); ts.add(14); //同一元素在TreeSet中只允许有一个 for (Integer i : ts) { System.out.println(i); } }}输出结果:35814--------------------------------------------------------------------------Compare:--------------------------------------------------------------------------package com.tarena.day07.set;public class Student implements Comparable{ private int id; private String name; @Override public int hashCode(){ //证明TreeSet和HashCode无关 System.out.println("aaa"); return super.hashCode(); } public int compareTo(Object obj){ System.out.println(this.id); if(obj!=null && obj instanceof Student){ Student s1 = (Student)obj; return this.id-s1.id; } return 0; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; }}--------------------------------------------------------------------------package com.tarena.day07.set;import java.util.TreeSet;public class TestCompare { public static void main(String[] args) { TreeSet<Student> ts = new TreeSet<Student>(); Student s1 = new Student(); //Student是不可比较的,但是第一个不用比较,所以能放进去,但是第二个就放不进去了 s1.setId(1); s1.setName("zhang"); Student s2 = new Student(); s2.setId(2); Student s3 = new Student(); s3.setId(3); Student s4 = new Student(); s4.setId(1); ts.add(s1); ts.add(s2); ts.add(s3); ts.add(s4); for (Student s : ts) { System.out.println(s.getId() + s.getName()); } }}输出结果:233111zhang2null3null--------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -