文章目录
一.集合
集合概述
- 什么是集合:由若干个确定的元素所构成的整体,在Java中,如果一个Java对象可以在内部持有若干其他Java对象,并对外提供访问接口,我们把这种Java对象称为集合。
- 为什么引入集合:为了便于处理一组类似的数据
list
ArrayList< E >
概述:
一种可调整大小的数组,其中< E >是一种特殊的数据类型——泛型
用法:
-
构造方法:
ArrayList<Object> arrayList = new ArrayList<>();
-
常用方法:
//添加元素到集合末尾 arrayList.add("hujiing"); //添加元素到指定索引处 arrayList.add(0,"21130124"); //删除指定元素,返回是否删除成功 System.out.println(arrayList.remove("21130124")); //删除指定索引处的元素,返回被删除的元素 System.out.println(arrayList.remove(0)); //修改指定索引处的元素,返回被修改的元素 System.out.println(arrayList.set(0,"666")); //返回指定索引处的元素 System.out.println(arrayList.get(1)); //返回集合长度 System.out.println(arrayList.size());
-
实例:存储学生对象并遍历
public class Student { private String name; private String age; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } }
public class Main { public static void main(String[] args) { ArrayList<Student> arrayList = new ArrayList<>(); Scanner scanner = new Scanner(System.in); System.out.println("请输入学生个数:"); int n= scanner.nextInt(); for (int i = 0; i < n; i++) { addStudent(arrayList); } for (Student s : arrayList) { System.out.println("姓名:"+s.getName() + ",年龄:" + s.getAge()); } } public static void addStudent(ArrayList arrayList){ Scanner scanner = new Scanner(System.in); Student s= new Student(); //输入姓名、年龄 System.out.println("请输入姓名:"); String name = scanner.nextLine(); System.out.println("请输入年龄:"); String age = scanner.nextLine(); //将输入的姓名及年龄赋予对象s s.setName(name); s.setAge(age); //将对象s添加到列表中 arrayList.add(s); } }
map
HashMap
概述:
Map 提供了一个更通用的元素存储方法。Map 集合类用于存储元素对(称作“键”和“值”),其中每个键映射到一个值。从概念上而言,您可以将 List 看作是具有数值键的 Map
用法:
-
构造方法:
HashMap<String,String> hashMap = new HashMap<String,String>();//键和值类型均为string型
-
常用方法:
//将指定值与该映射中的指定键相关联; // 第一次出现:添加元素 hashMap.put("21130124","胡靖"); // 第二次出现:修改元素 hashMap.put("21130124","hj"); //根据键删除键值对元素 hashMap.remove("21130124"); //删除所有键值对元素 hashMap.clear(); //判断集合中是否有指定的键 hashMap.containsKey("21130124"); //判断集合中是否有指定的值 hashMap.containsValue("胡靖"); //判断集合是否为空 hashMap.isEmpty(); //键值对个数 hashMap.size(); //根据键获取值 hashMap.get("21130124"); //获取所有键的集合 {Set<String> keySet= hashMap.keySet(); for (String key:keySet) { System.out.println(key); }} //获取所有值的集合 {Collection<String> values = hashMap.values(); for (String val:values){ System.out.println(val); }}
-
遍历方式
HashMap<String, String> map = new HashMap<>(); map.put("21130124","胡靖"); map.put("21130303","韩京"); //获取键的集合 Set<String> strings = map.keySet(); //增强for:(遍历获取的元素:遍历对象) for (String s:strings){ // value = 遍历获取的键对应的值 String value = map.get(s); //输出键值对 System.out.println(s+","+value); }
set
HashSet
概述:
Set体系集合可以知道某物是否已经存在于集合中,不会存储重复的元素。加入Set的每个元素必须是唯一的,否则,Set是不会把它加进去的。没有带索引的方法。无序
用法:
-
构造方法:
HashSet<String> hashSet = new HashSet<String>();
-
常用方法:
hashSet.add("1");
-
实例:学生存储系统
public class Student { private String name; private String id; public Student(String name, String id) { this.name = name; this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getId() { return id; } public void setId(String id) { this.id = id; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Student student = (Student) o; if (name != null ? !name.equals(student.name) : student.name != null) return false; return id != null ? id.equals(student.id) : student.id == null; } //快捷键Alt+insert,选择hashcode and equal @Override public int hashCode() { int result = name != null ? name.hashCode() : 0; result = 31 * result + (id != null ? id.hashCode() : 0); return result; } }
public static void main(String[] args) { HashSet<Student> students = new HashSet<>(); Student s1 = new Student("胡靖", "21130124"); Student s2 = new Student("韩京", "21130303"); Student s3 = new Student("胡靖", "21130124"); students.add(s1); students.add(s2); students.add(s3); for(Student s:students){ System.out.println(s.getName()+","+s.getId()); } }
Treeset
概述:
有序,排序方法取决于构造方法
用法:
-
自然排序:
public class Main { public static void main(String[] args) { TreeSet<Student> treeSet = new TreeSet<>(); Student s1 = new Student("hj",18); Student s2 = new Student("hx",20); Student s3 = new Student("hj",17); Student s4 = new Student("zxj",18); treeSet.add(s1); treeSet.add(s2); treeSet.add(s3); treeSet.add(s4); for(Student s:treeSet){ System.out.println(s.getName()+","+s.getAge()); } } }
public class Student implements Comparable<Student>{ private String name; private int age; public Student() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Student(String name, int age) { this.name = name; this.age = age; } /**重写compareTo*/ @Override public int compareTo(Student o) { //年龄按升序排序,this看做要进入集合的元素,o看做原本有的元素,this大则返回1 int num = this.age-o.age; //姓名按字典序排序 int num1= num==0?this.name.compareTo(o.name):num; return num1; /**返回值为1时,升序排序;为0时跳过;为-1时降序*/ } }
-
比较器排序:
public class Student{ private String name; private int age; public Student() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Student(String name, int age) { this.name = name; this.age = age; } }
public class Main { public static void main(String[] args) { //可如自然排序中,在student中实现comparator接口,也可如下创建匿名内部类实现 TreeSet<Student> treeSet = new TreeSet<Student>(new Comparator<Student>() { @Override public int compare(Student o1, Student o2) { int num = o1.getAge()-o2.getAge(); int num1= num==0?o1.getName().compareTo(o2.getName()):num; return num1; } }); Student s1 = new Student("hj",18); Student s2 = new Student("hx",20); Student s3 = new Student("hj",17); Student s4 = new Student("zxj",18); treeSet.add(s1); treeSet.add(s2); treeSet.add(s3); treeSet.add(s4); for(Student s:treeSet){ System.out.println(s.getName()+","+s.getAge()); } } }
二.常用类
1.Object
概述:
- 此类是类层次结构的根,任何类都直接或间接基础该类;
- 子类的构造方法默认访问父类的无参构造方法的原因是:他们的祖宗类Object为无参构造
常用方法:
- toString:直接打印类信息时,结果不便阅读,为了方便打印类信息,最好重写toString
- equals:直接比较类时,比较的是地址,为了方便同类内容比较,最好重写equals
2.String
概述:
String就是字符串,所以所有双引号字符串都是String的对象
用法:
-
构造方法:
//创建空白字符串对象 String s = new String(); //根据字符数组内容创建字符串 char[] ch = {'1','2','3'}; String s1 = new String(ch); //根据字节数组内容创建字符串 byte[] bytes = {1,2,3}; String s2 = new String(bytes); //直接赋值 String s3 = "123";
-
常用方法
//比较地址是否相同 System.out.println(s1==s2); //比较内容是否相同 s1.equals(s2); //返回指定索引处的char值 s1.charAt(1); //返回字符串长度 s1.length();
3.StringBuilder
概述:
可变的字符串类
用法:
-
构造方法
//创建空白对象 StringBuilder stringBuilder = new StringBuilder(); //根据字符串s创建对象 String s = "123"; StringBuilder stringBuilder1 = new StringBuilder(s);
-
常用方法:
//添加数据,并返回数据本身 s1.append(1); //反转字符串,返回相反的字符序列 s2.reverse(); //转化成string s2.toString();
4.StringBuffer
概述:
可变的字符串类
用法:
-
构造方法
StringBuffer stringBuffer = new StringBuffer("123456");//括号内为字符串内容
-
常用方法
//将指定字符串追加到末尾 stringBuffer.append("123456"); //将字符串反转 stringBuffer.reverse(); //移除指定位置的字符串 //参数:起始位置的角标 stringBuffer.delete(0,1); //将int参数的字符串表示形式插入此序列中 stringBuffer.insert(1,1); //使用给定String中的字符替换此序列的子字符串中的字符 //参数:起始位置角标及替换字符 stringBuffer.replace(1,2,"12"); //截取从指定位置开始到结束位置,包括开始位置,不包括结束位置 stringBuffer.substring(1,2);
思考:
stringbuffer与stringbuilder的区别:
StringBuffer:可变字符串、效率低、线程安全;
StringBuilder:可变字符序列、效率高、线程不安全;
使用原则:
如果要操作少量的数据,用String ;
单线程操作大量数据,用StringBuilder ;
多线程操作大量数据,用StringBuffer。
5.System
概述:
System是一个类,这个System类主要是一些与系统相关的属性和方法的集合,而且其内部的方法全部是静态的,所以我们直接使用System直接调用就好,比如我们常用的一个System.out.print。
常用方法:
//终止当前运行的java虚拟机,status值非零为异常
System.exit(0);
//返回当前时间与1970年01月01日00:00点之间的毫秒差值
System.currentTimeMillis();
//将数组中指定数据拷贝到另一个数组,其中传输依次为
//原数组,原数组索引起始位置,目标数组,目标数组索引起始位置,复杂元素个数
System.arraycopy();
6.Data
概述:
表示特定的瞬间,精确到毫秒,可以通过方法来设定自己所表示的时间,可以表示任意的时间
用法:
-
构造方法:
//当前时间 Date date = new Date(); //与1970年01月01日00:00点相差time时长的时间,单位毫秒 long time = 1000*60*60; Date date1 = new Date(time);
-
常用方法:
//获取从1970年01月01日00:00点到对象现在的时间值 date.getTime();//结果为1970年01月01日00:00点到现在的毫秒数 date1.getTime();//结果为date1值与1970年01月01日00:00点时间差毫秒数 //设置时间,单位毫秒 date.setTime(1000);