Java基础04——常用工具类
一、基本语法
【变量、数据类型、数组、运算符、流程控制语句】
二、面向对象基础与进阶
【类和对象、方法(构造、重载)、继承(方法重写)、抽象类、】
三、面向对象高级
【接口、匿名内部类、泛型、文件、反射、多线程】
四、常用工具类:
【类集合(ArrayList、HashSet、HashMap)、String(切割)、Collections】
四、常用类
1、ArrayList
一、构建一个ArrayList对象
ArrayList<Integer> array = new ArrayList<Integer>();
ArrayList<Product> arrayPrdt = new ArrayList<Product>();
二、往ArrayList中添加数据
array.add(5);
array.add(2,4);
arrayPrdt.add(p1);
三、获取ArrayList的数据、长度
int a = array.get(1); int length=array.size();
四、移除ArrayList中的数据
array.remove(1);
五、遍历ArrayList中的数据
for (int i = 0; i < array.size(); i++) { System.out.println(array.get(i)); } for(int i:array) { System.out.println(i); }
六、更改指定位置的数据
array.set(2, 15);//第三个数据上改为15
七、应用(用ArrayList包装并操作对象数据)
包装对象:
ArrayList<Product> arr=new ArrayList<Product>(); arr.add(p1); arr.add(p2); arr.add(p3);
操作对象:
//计算总金额 float sum=0; for(int i=0;i<arr.size();i++) { sum +=(arr.get(i).pPrice*arr.get(i).pNum); } System.out.println("总金额为:"+sum);
//计算单价最高的商品 Product max=arr.get(0); for(int i=0;i<arr.size();i++) { if(arr.get(i).pPrice>max.pPrice) { max=arr.get(i); } } System.out.println("单价最高的商品是:"+max.pName);
注意我比较的是arr对象的price,但我输出的是对象的name。
//按单价从高到低排序 for(int i=1;i<arr.size();i++) { for(int j=0;j<arr.size()-i;j++) { if(arr.get(j).pPrice<arr.get(j+1).pPrice) { Product t=arr.get(j); Product t_1=arr.get(j+1); arr.set(j, t); arr.set(j+1, t_1); //ArrayList不能赋值形式(以下错误) // Product t=arr.get(j); // arr.get(j)=arr.get(j+1); // arr.get(j+1)=t; } } } System.out.println("商品单价从高到低依次为:"); for(int i=0;i<arr.size();i++) { System.out.println(arr.get(i).pName); }
2、HashSet(散列表、无序、不能重复)
一、构建一个HashSet对象
HashSet<User> set1=new HashSet<User>();
二、往HashSet中添加数据
set1.add(u1);
三、获取HashSet长度(HashSet散列表不能通过索引获取具体的某个数据)
int size=set1.size();
四、判断数据是否存在、
boolean t=set1.contains(u1);
五、移除HashSet数据
set1.remove(u1);
六、遍历HashSet中的数据
方法一:用迭代器
Iterator<User> iterator=set1.iterator(); while(iterator.hasNext()) { User next=iterator.next(); System.out.println(next); }
方法二:用增强for循环(内部封装的迭代器)
for(User tmp:set1) { System.out.println(tmp); }
七、HashSet中的数据找最大值
1 //从set中找出薪水最高的User对象 2 Iterator<Homework2_User> it2=set1.iterator(); 3 Homework2_User maxUser=it2.next();//// 由于从set集合中无法直接取出一个数据,所以使用了它的迭代器工具 4 //方法一: 5 while(it2.hasNext()) 6 { 7 Homework2_User user=it2.next();//这里得要先接住it2.next() 8 if(maxUser.getUserSalary()<user.getUserSalary()) 9 { 10 maxUser=user; 11 } 12 } 13 //方法二: 14 for(Homework2_User user:set1) 15 { 16 if(maxUser.getUserSalary()<user.getUserSalary()) 17 { 18 maxUser=user; 19 } 20 } 21 System.out.println("set中薪水最高的对象为:"+maxUser);
3、HashMap
一、构造一个hashmap对象
HashMap<String, User> map1=new HashMap<String, User>();
二、往hashmap中添加数据(如果key重复,则会覆盖)
map1.put("01", u1);
三、获取hashmap中的数据、长度(靠key来索引)
User a=map1.get("01");
int b=map1.size();
四、判断hashmap中的数据是否存在
boolean t=map1.containsKey("01"); System.out.println(t);
五、移除hashmap中的数据
map1.remove("01");
六、遍历hashmap中的数据
方法一:
// 先取出所有的key Set<String> keySet=map1.keySet(); // 然后遍历一个一个的key,去map1中取value for(String key:keySet) { System.out.println(map1.get(key)); }
方法二:
1 Set<java.util.Map.Entry<String, Homework2_User>> entrySet=map1.entrySet(); 2 for(java.util.Map.Entry<String, Homework2_User> ent:entrySet) 3 { 4 System.out.println(ent.getKey()+":"+ent.getValue()); 5 }
六、从map中找出年龄最小的用户
1 System.out.println("map中age最小的对象是:"); 2 Iterator<String> keyIter=map1.keySet().iterator();//利用迭代器取出随意一个map数据 3 Homework2_User minAgeUser=map1.get(keyIter.next()); 4 for(String key:map1.keySet()) 5 { 6 if(minAgeUser.getUserAge()>map1.get(key).getUserAge()) 7 { 8 minAgeUser=map1.get(key); 9 } 10 } 11 System.out.println(minAgeUser);
4、String类
字符串切割工具split
String a="01,02,03"; String[] split=a.split(",");
5、Collections类
使用方式1: 将需要排序的List<User> 和 list中的数据类型User的比较器 传给框架来排序
Collections.sort(uList, new Comparator<User>() { @Override public int compare(User o1,User o2) { if(o1.getSalary()>o2.getSalary()) { return 1; } if(o1.getSalary()==o2.getSalary()) { return 0; } else { return -1; } } });
使用方式2:将需要排序的List<User>传递给框架即可, 不需要传比较器(前提是,数据类User本身要带一个compareTo方法)
public class User implements Comparable<User>{ @Override public int compareTo(User o2){ if(this.getSalary > o2.getSalary){ return 1; } if(this.getSalary == o2.getSalary){ return 0; }else{ return -1; } } }
浙公网安备 33010602011771号