集合共有的方法:add,isEmpty,Iterator,remove
- Collection(不唯一,无序)
- List(不唯一,有序):ArrayList,LinkedList
- Set(唯一,无序):HashSet,TreeSet
- Map(键值对象)(没有Iterator): HashMap,TreeMap
List常用办法get,set,Listiterator
同步:同斥,上锁
vector(与ArrayList同级)
异步
ArrayList 动态
连续空间,遍历,随机访问元素
长度可变的数组
LinkedList 链表
插入,删除元素
增加或删除首尾对象
1 范例1: 2 /** 3 * 把1到100中所有包含4的数剔除,并打印剩下的数 4 */ 5 import java.util.*; 6 public class DivisibleBy4 { 7 public static void main(String[] args) { 8 List nums = new ArrayList(); 9 List nums1 = new ArrayList(); 10 //存数据 11 for (int i = 1; i <= 100; i++) { 12 nums.add(i); 13 } 14 15 !!!!★★★★★对数据进行操作,把数据放在另一个集合中★★★★★ 16 !!!!★★★★★对某对象进行foreach操作,不能对该对象进行remove,add操作★★★★★ 17 for (int i = 0; i < nums.size(); i++) { 18 if (nums.get(i).toString().contains("4")) { 19 //【★★★如果add为false,那么添加不成功!!!!★★★】 20 nums1.add(nums.get(i)); 21 } 22 } 23 24 /*方法一*/ 25 for (int i = 0; i < nums1.size(); i++) { 26 nums.remove(nums1.get(i)); 27 } 28 29 /*方法二*/ 30 //【★★★如果remove为false,那么删除不成功!!!!★★★】 31 nums.removeAll(nums1); 32 System.out.println(nums); 33 } 34 35 范例2: 36 /** 37 * 把车牌号中所有包含8的剔除,并打印剩下的数 38 */ 39 import java.util.*; 40 public class PlateNum { 41 List<String> No = new ArrayList<String>(); 42 List<String> No1 = new ArrayList<String>(); 43 Random rd = new Random(); 44 for (int i = 0; i < 10; i++) { 45 //随机一些车牌 46 String carNo = "川A" + (rd.nextInt(100000) + 1); 47 No.add(carNo); 48 } 49 System.out.println(No); 50 51 /** 52 * 第一种方法 53 */ 54 for (int i = 0; i < No.size(); i++) { 55 if (No.get(i).toString().contains("8")) { 56 No1.add(No.get(i)); 57 } 58 } 59 //【★★★如果remove为false,那么删除不成功!!!!★★★】 60 No.removeAll(No1); 61 System.out.println(No); 62 63 /** 64 * 第二种方法 65 */ 66 for (int i = 0; i < No.size(); i++) { 67 char[] ch = No.get(i).toString().toCharArray(); 68 for (int j = 2; j < ch.length; j++) { 69 if (ch[j] == '8') { 70 No.remove(i); 71 break; 72 } 73 } 74 } 75 System.out.println(No); 76 } 77 } 78 79 ArrayList:add,remove,toString,subString,foreach,随机名字 80 范例1: 81 /** 82 * 100个姓名存在集合中,把姓王的找出来 83 */ 84 public class TestDemo2 { 85 public static void main(String[] args) { 86 List al = new ArrayList(); 87 //构建姓的数组 88 String[] xin = new String[]{"丁","王","徐","汤","独孤","李"}; 89 String[] ming = new String[]{"强","求败","建国","援朝","翠花","狗蛋","嫚","凯","程琳"}; 90 91 /*存数据*/ 92 Random rd = new Random(); 93 for (int i = 0; i < 100; i++) { 94 al.add(xin[rd.nextInt(xin.length)] + ming[rd.nextInt(ming.length)]); 95 } 96 //测试 97 System.out.println(al); 98 99 /*取数据*/ 100 //姓王的名字剔除 101 /*第一种方法*/ 102 System.out.println("***************************************************"); 103 List al2 = new ArrayList(); 104 for (int i = 0;i < al.size();i++) { 105 /*charAt,首字母*/ 106 // if (al.get(i).toString().charAt(0)=='王') { 107 /*subString,截取*/ 108 if (al.get(i).toString().substring(0, 1).equals("王")) { 109 al2.add(al.get(i)); 110 } 111 } 112 al.removeAll(al2); 113 System.out.println(al); 114 115 /*第二种方法*/ 116 List al2 = new ArrayList(); 117 //增强型for循环,可以删除对象。 118 ★★★对某对象进行foreach操作,不能对该对象进行remove,add操作,分两步★★★ 119 for (Object o : al) { 120 if (o.toString().substring(0,1).equals("王")) { 121 al2.add(o); 122 } 123 } 124 al.removeAll(al2); 125 System.out.println(al); 126 } 127 } 128 129 范例2: 130 /** 131 * 1.把1到100中所有被3整除的数放在集合中 132 * 2.求这些数字的和 133 */ 134 public class TestDemo { 135 public static void main(String[] args) { 136 ArrayList al = new ArrayList(); 137 int sum = 0; 138 /** 139 * 存数据 140 */ 141 for (int i = 1; i <= 100; i++) { 142 if (i % 3 == 0) { 143 al.add(i); 144 } 145 } 146 System.out.println(al); 147 148 /** 149 * 求和 150 */ 151 for (int i = 0; i < al.size(); i++) { 152 sum += (Integer)al.get(i); 153 } 154 System.out.println(sum); 155 } 156 } 157 158 范例3: 159 /** 160 * 剔除王姓和年龄小于20的学员 161 */ 162 import java.util.Random; 163 public class Student { 164 private String name; 165 private int age; 166 public static final String[] xin = new String[]{"丁","王","徐","汤","独孤","李"}; 167 public static final String[] ming = new String[]{"强","求败","建国","援朝","翠花","狗蛋","嫚","凯","程琳"}; 168 169 public Student() { 170 //随机姓名和年龄 171 Random rd = new Random(); 172 this.name = xin[rd.nextInt(xin.length)] + ming[rd.nextInt(ming.length)]; 173 this.age = rd.nextInt(20) + 10; 174 } 175 ★★集合中,toString一定要重写★★ 176 /*toString本身是【对象@hashcode码】*/ 177 @Override 178 public String toString() { 179 return "Student [name=" + name + ", age=" + age + "]"; 180 } 181 182 public String getName() { 183 return name; 184 } 185 public void setName(String name) { 186 this.name = name; 187 } 188 public int getAge() { 189 return age; 190 } 191 public void setAge(int age) { 192 this.age = age; 193 } 194 } 195 196 【import有先后次序】 197 import java.util.*; 198 public class TestDemo3 { 199 public static void main(String[] args) { 200 List<Student> stuArr = new ArrayList<Student>(); 201 for (int i = 0; i < 10; i++) { 202 stuArr.add(new Student()); 203 } 204 System.out.println(stuArr); 205 206 System.out.println("**********************************"); 207 ★★★对某对象进行foreach操作,不能对该对象进行remove,add操作,分两步★★★ 208 List<Student> delStu = new ArrayList<Student>(); 209 try { 210 /*方法1*/ 211 for (Student student : stuArr) { 212 if ("王".equals(student.getName().substring(0, 1)) || student.getAge()>= 20) { 213 delStu.add(student); 214 } 215 } 216 stuArr.removeAll(delStu); 217 System.out.println(stuArr); 218 219 } catch (Exception e) { 220 System.out.println("删除有误"); 221 e.printStackTrace(); 222 } 223 } 224 } 225 226 -----------------------Set---------------------- 227 set转换成ArrayList 228 用到对象,就要重写hashCode和equals方法,实现compareTo接口 229 1、HashSet 230 范例: 231 具体类 232 Collection(没有对象):对集合进行排序,遍历 233 shuffle 打乱顺序 234 public class SetDemo { 235 public static void main(String[] args) { 236 Set hs = new HashSet(); 237 Random rd = new Random(); 238 for (int i = 0; i < 100; i++) { 239 if (hs.size() == 10) { 240 break; 241 } 242 hs.add(String.valueOf(rd.nextInt(100))); 243 } 244 System.out.println(hs); 245 246 ArrayList al = new ArrayList(hs); 247 /*Collections.sort 升序排列*/ 248 Collections.sort(al); 249 250 /*Collections.shuffle 乱序排列*/ 251 Collections.shuffle(al); 252 System.out.println(al); 253 } 254 } 255 256 public class SetDemo { 257 public static void main(String[] args) { 258 Set hs = new HashSet(); 259 hs.add("1"); 260 hs.add("1"); 261 hs.add("2"); 262 hs.add("1"); 263 System.out.println(hs); 264 /*方法1*/ 265 ArrayList al = new ArrayList(hs); 266 System.out.println(al.get(0)); 267 /*方法2*/ 268 Object[] hs1 = hs.toArray(); 269 System.out.println(hs1[0]); 270 } 271 } 272 273 2、TreeSet 自动升序排列 274 public class SetDemo { 275 public static void main(String[] args) { 276 Set ts = new TreeSet(); 277 ts.add(2); 278 ts.add(9); 279 ts.add(9); 280 ts.add(5); 281 ts.add(2); 282 283 //字母挨个比 284 ts.add("apple"); 285 ts.add("hello"); 286 ts.add("very"); 287 ts.add("apple"); 288 ts.add("happy"); 289 290 /*Double.doubleToRawLongBits(price) != Double.doubleToRawLongBits(price1) 比double*/ 291 ts.add(2.23); 292 ts.add(2.236); 293 ts.add(2.230); 294 ts.add(2.6); 295 ts.add(2.6); 296 297 //前面false,后面true 298 ts.add(true); 299 ts.add(false); 300 ts.add(true); 301 ts.add(true); 302 ts.add(false); 303 304 System.out.println(ts); 305 } 306 } 307 308 -------------------泛型---------------- 309 JDK1.5以后的版本 310 限制参数类型 311 312 ---------------------Iteator---------------- 313 一看到集合,不需要经过思考,就用Iteator遍历 314 Collecton继承Iteator,所以Collecton都可以用Iteator 315 316 -----------------------Map------------------- 317 范例: 318 public class MapDemo { 319 public static void main(String[] args) { 320 //Map接口实现的类HashMap 321 Map hm = new HashMap(); 322 /** 323 * K,V都是对象 324 */ 325 hm.put(1, "张三"); 326 hm.put(2, "张三"); 327 hm.put(3, "张学友"); 328 System.out.println(hm); 329 330 hm.remove(1); 331 332 //根据key得到value 333 String a = hm.get(2).toString(); 334 System.out.println(a); 335 //键的集合 336 Set b = hm.keySet(); 337 System.out.println(b); 338 //值的集合 339 Collection c = hm.values(); 340 System.out.println(c); 341 } 342 } 343 344 Properties 创建txt文档 345 ★★★类名不能和关键字,或与系统默认的名重名★★★ 346 范例: 347 public class PropertiesDemo { 348 public static void main(String[] args) throws FileNotFoundException, IOException { 349 Properties pro = new Properties(); 350 pro.setProperty("1", "王寅"); 351 pro.setProperty("2", "李四"); 352 pro.setProperty("3", "张三"); 353 354 /*方法1*/ 355 // pro.store(new FileOutputStream(new File("D:\a.txt")), "存姓名"); 356 357 /*方法2*/ 358 // pro.store(new FileOutputStream(new File("D:" + File.separator +"\c.txt")), "存姓名"); 359 360 /*方法3*/ 361 pro.load(new FileInputStream(new File("D:" + File.separator +"\c.txt"))); 362 System.out.println(pro.getProperty("2")); 363 } 364 }