JavaSE DataStructure
List
ArrayList
ArrayListDemo1 点击查看代码
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
class ArrayListDemo1 {
public static void main(String[] args) {
Collection<String> list = new ArrayList<>();
String[] strings = new String[] { new String("Hello"), new String("World") };
initList(list, strings);
traverseList(list);
}
private static void traverseList(Collection<String> list) {
fun1(list);//迭代器遍历
fun2(list);//for-each循环遍历
fun3(list);//普通for循环遍历
}
private static void fun3(Collection<String> list) {
System.out.print("普通for循环遍历:");
for (int i = 0; i < list.size(); i++) {
System.out.print(((ArrayList<String>) list).get(i) + "\t");
}
System.out.println("\n");
}
private static void fun2(Collection<String> list) {
System.out.print("for-each循环遍历:");
for (String string : list) {
System.out.print(string + "\t");
}
System.out.println("\n");
}
private static void fun1(Collection<String> list) {
//迭代器遍历
System.out.print("迭代器遍历:");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String s = iterator.next();
System.out.print(s + "\t");
}
System.out.println("\n");
}
private static void initList(Collection<String> list, String[] strings) {
for (String str : strings) {
list.add(str);
}
}
}
运行结果
迭代器遍历:Hello World
for-each循环遍历:Hello World
普通for循环遍历:Hello World
ArrayListDemo2 点击查看代码
import java.util.ArrayList;
import java.util.Objects;
class Student {
private String name;
private int age;
private String gender;
public Student() {
}
public Student(String name, int age, String gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return this.age;
}
public void setAge(int age) {
this.age = age;
}
public String getGender() {
return this.gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Student name(String name) {
setName(name);
return this;
}
public Student age(int age) {
setAge(age);
return this;
}
public Student gender(String gender) {
setGender(gender);
return this;
}
@Override
public boolean equals(Object o) {
if (o == this)
return true;
if (!(o instanceof Student)) {
return false;
}
Student student = (Student) o;
return Objects.equals(name, student.name) && age == student.age && Objects.equals(gender, student.gender);
}
@Override
public int hashCode() {
return Objects.hash(name, age, gender);
}
@Override
public String toString() {
return "{" +
" name='" + getName() + "'" +
", age='" + getAge() + "'" +
", gender='" + getGender() + "'" +
"}";
}
}
public class ArrayListDemo2 {
public static void main(String[] args) {
ArrayList<Student> list = new ArrayList<>();
Student[] students=new Student[]{
new Student("张三", 18, "男"),
new Student("李四", 19, "男"),
new Student("王五", 12, "男"),
new Student("张三", 18, "男")
};
initList(list, students);
traverseList(list);
}
private static void traverseList(ArrayList<Student> list) {
for (Student student : list) {
System.out.println(student+"\n");
}
}
private static void initList(ArrayList<Student> list, Student[] students) {
for (Student student : students) {
list.add(student);
}
}
}
运行结果
{ name='张三', age='18', gender='男'}
{ name='李四', age='19', gender='男'}
{ name='王五', age='12', gender='男'}
{ name='张三', age='18', gender='男'}
LinkedList
LinkedListDemo 点击查看代码
import java.util.Iterator;
import java.util.LinkedList;
public class LinkedListDemo {
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
String[] strings = new String[] {
new String("刘备"),
new String("关羽"),
new String("张飞"),
new String("赵云"),
new String("黄忠"),
};
initList(list, strings);
traverseList(list);
System.out.println();
list.addFirst("曹操");
System.out.println(list);
System.out.println("====================================\n");
list.addLast("许褚");
System.out.println(list);
System.out.println("====================================\n");
String s1 = list.getFirst();
System.out.println(s1);
System.out.println("====================================\n");
String s2 = list.getLast();
System.out.println(s2);
System.out.println("====================================\n");
String s3 = list.removeFirst();
System.out.println(s3);
System.out.println("====================================\n");
String s4 = list.removeLast();
System.out.println(s4);
System.out.println("====================================\n");
}
private static void traverseList(LinkedList<String> list) {
System.out.print("初始化List后:");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String s = iterator.next();
System.out.print(s + "\t");
}
System.out.println();
}
private static void initList(LinkedList<String> list, String[] strings) {
for (String string : strings) {
list.add(string);
}
System.out.println();
}
}
运行结果
初始化List后:刘备 关羽 张飞 赵云 黄忠
[曹操, 刘备, 关羽, 张飞, 赵云, 黄忠]
====================================
[曹操, 刘备, 关羽, 张飞, 赵云, 黄忠, 许褚]
====================================
曹操
====================================
许褚
====================================
曹操
====================================
许褚
====================================
Set
HashSet
HashSetDemo1 点击查看代码
package Set.HashSet;
import java.util.HashSet;
//练习 : 使用HashSet集合存储字符串并遍历
public class HashSetDemo1 {
public static void main(String[] args) {
HashSet<String> set = new HashSet<>();
String[] strings = new String[] {
new String("张三"),
new String("李四"),
new String("王五"),
new String("赵六"),
new String("周七"),
new String("张三"),
new String("李四"),
new String("赵六"),
new String("周七"),
new String("张三"),
new String("李四")
};
initSet(set, strings);
traverseSet(set);
}
private static void traverseSet(HashSet<String> set) {
for (String string : set) {
System.out.print(string + "\t ");
}
}
private static void initSet(HashSet<String> set, String[] strings) {
for (String string : strings) {
set.add(string);
}
}
}
运行结果
李四 周七 张三 王五 赵六
HashSetDemo2 点击查看代码
package Set.HashSet;
import java.util.*;
class Student {
private String name;
private int age;
private String gender;
public Student() {
}
public Student(String name, int age, String gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return this.age;
}
public void setAge(int age) {
this.age = age;
}
public String getGender() {
return this.gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Student name(String name) {
setName(name);
return this;
}
public Student age(int age) {
setAge(age);
return this;
}
public Student gender(String gender) {
setGender(gender);
return this;
}
@Override
public boolean equals(Object o) {
if (o == this)
return true;
if (!(o instanceof Student)) {
return false;
}
Student student = (Student) o;
return Objects.equals(name, student.name) && age == student.age && Objects.equals(gender, student.gender);
}
@Override
public int hashCode() {
return Objects.hash(name, age, gender);
}
@Override
public String toString() {
return "{" +
" name='" + getName() + "'" +
", age='" + getAge() + "'" +
", gender='" + getGender() + "'" +
"}";
}
}
// 练习 : 使用HashSet集合存储自定义对象并遍历
public class HashSetDemo2 {
public static void main(String[] args) {
HashSet<Student> set = new HashSet<>();
Student[] students = new Student[] {
new Student("张三", 18, "男"),
new Student("李四", 19, "男"),
new Student("王五", 12, "男"),
new Student("张三", 18, "男"),
new Student("李四", 19, "男"),
new Student("王五", 12, "男")
};
initList(set, students);
traverseList(set, students);
}
private static void traverseList(HashSet<Student> set, Student[] students) {
Iterator<Student> iterator = set.iterator();
while (iterator.hasNext()) {
Student student = iterator.next();
System.out.println(student + "\t");
}
}
private static void initList(HashSet<Student> set, Student[] students) {
for (Student student : students) {
set.add(student);
}
}
}
运行结果
{ name='李四', age='19', gender='男'}
{ name='张三', age='18', gender='男'}
{ name='王五', age='12', gender='男'}
LinkedHashSet
LinkedHashSetDemo 点击查看代码
TreeSet
TreeSetDemo1 点击查看代码
package Set.TreeSet;
import java.util.*;
/**
* TreeSet集合特点
*
* 不包含重复元素的集合
* 没有带索引的方法
* 可以将元素按照规则进行排序
*
*/
public class TreeSetDemo1 {
// 存储Integer类型的整数,并遍历
public static void main(String[] args) {
TreeSet<Integer> treeset = new TreeSet<>();
Integer[] integers = new Integer[] { 9, 2, 8, 1, 5, 1 };
initTreeSet(treeset, integers);
traverseTreeSet(treeset);
}
private static void traverseTreeSet(TreeSet<Integer> treeset) {
for (Integer integer : treeset) {
System.out.print(integer + "\t");
}
}
private static void initTreeSet(TreeSet<Integer> treeset, Integer[] integers) {
for (Integer integer : integers) {
treeset.add(integer);
}
}
}
运行结果
1 2 5 8 9
TreeSetDemo2 点击查看代码
package Set.TreeSet;
import java.util.*;
class Student implements Comparable<Student> {
private String name;
private int age;
private String gender;
public Student() {
}
public Student(String name, int age, String gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return this.age;
}
public void setAge(int age) {
this.age = age;
}
public String getGender() {
return this.gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Student name(String name) {
setName(name);
return this;
}
public Student age(int age) {
setAge(age);
return this;
}
public Student gender(String gender) {
setGender(gender);
return this;
}
@Override
public boolean equals(Object o) {
if (o == this)
return true;
if (!(o instanceof Student)) {
return false;
}
Student student = (Student) o;
return Objects.equals(name, student.name) && age == student.age && Objects.equals(gender, student.gender);
}
@Override
public int hashCode() {
return Objects.hash(name, age, gender);
}
@Override
public String toString() {
return "{" +
" name='" + getName() + "'" +
", age='" + getAge() + "'" +
", gender='" + getGender() + "'" +
"}";
}
@Override
public int compareTo(Student o) {
return this.age - o.age == 0 ? this.name.compareTo(o.name) : this.age - o.age;
}
// @Override
// public int compareTo(Student o) {
// if (this.age != o.age) {
// return Integer.compare(this.age, o.age);
// } else {
// return this.name.compareTo(o.name);
// }
// }
}
public class TreeSetDemo2 {
public static void main(String[] args) {
TreeSet<Student> treeset = new TreeSet<>();
Student[] students = new Student[] {
new Student("A张三", 18, "男"),
new Student("S李四", 20, "男"),
new Student("D王五", 18, "女"),
new Student("F赵六", 20, "男"),
new Student("G孙七", 18, "女"),
new Student("H赵六", 20, "男"),
new Student("J孙七", 18, "女")
};
initTreeSet(treeset, students);
traverseTreeSet(treeset);
}
private static void traverseTreeSet(TreeSet<Student> treeset) {
for (Student student : treeset) {
System.out.println(student + "\n");
}
}
private static void initTreeSet(TreeSet<Student> treeset, Student[] students) {
for (Student student : students) {
treeset.add(student);
}
}
}
运行结果
{ name='A张三', age='18', gender='男'}
{ name='D王五', age='18', gender='女'}
{ name='G孙七', age='18', gender='女'}
{ name='J孙七', age='18', gender='女'}
{ name='F赵六', age='20', gender='男'}
{ name='H赵六', age='20', gender='男'}
{ name='S李四', age='20', gender='男'}
TreeSetDemo3 点击查看代码
package Set.TreeSet;
import java.util.*;
class Student {
private String name;
private int age;
private String gender;
public Student() {
}
public Student(String name, int age, String gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return this.age;
}
public void setAge(int age) {
this.age = age;
}
public String getGender() {
return this.gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Student name(String name) {
setName(name);
return this;
}
public Student age(int age) {
setAge(age);
return this;
}
public Student gender(String gender) {
setGender(gender);
return this;
}
@Override
public boolean equals(Object o) {
if (o == this)
return true;
if (!(o instanceof Student)) {
return false;
}
Student student = (Student) o;
return Objects.equals(name, student.name) && age == student.age && Objects.equals(gender, student.gender);
}
@Override
public int hashCode() {
return Objects.hash(name, age, gender);
}
@Override
public String toString() {
return "{" +
" name='" + getName() + "'" +
", age='" + getAge() + "'" +
", gender='" + getGender() + "'" +
"}";
}
}
class ComparatorImpl implements Comparator<Student> {
@Override
public int compare(Student o1, Student o2) {
return o1.getAge() - o2.getAge() == 0 ? o1.getName().compareTo(o2.getName()) : o1.getAge() - o2.getAge();
}
}
public class TreeSetDemo3 {
public static void main(String[] args) {
TreeSet<Student> treeset = new TreeSet<>(new ComparatorImpl());
Student[] students = new Student[] {
new Student("张三", 18, "男"),
new Student("李四", 20, "男"),
new Student("王五", 18, "女"),
new Student("赵六", 20, "男"),
new Student("孙七", 18, "女"),
new Student("赵六", 20, "男"),
new Student("孙七", 18, "女")
};
initTreeSet(treeset, students);
traverseTreeSet(treeset);
}
private static void traverseTreeSet(TreeSet<Student> treeset) {
for (Student student : treeset) {
System.out.println(student + "\n");
}
}
private static void initTreeSet(TreeSet<Student> treeset, Student[] students) {
for (Student student : students) {
treeset.add(student);
}
}
}
运行结果
{ name='孙七', age='18', gender='女'}
{ name='张三', age='18', gender='男'}
{ name='王五', age='18', gender='女'}
{ name='李四', age='20', gender='男'}
{ name='赵六', age='20', gender='男'}
TreeSetDemo4 点击查看代码
package Set.TreeSet;
import java.util.*;
class Student {
private String name;
private int age;
private String gender;
public Student() {
}
public Student(String name, int age, String gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return this.age;
}
public void setAge(int age) {
this.age = age;
}
public String getGender() {
return this.gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Student name(String name) {
setName(name);
return this;
}
public Student age(int age) {
setAge(age);
return this;
}
public Student gender(String gender) {
setGender(gender);
return this;
}
@Override
public boolean equals(Object o) {
if (o == this)
return true;
if (!(o instanceof Student)) {
return false;
}
Student student = (Student) o;
return Objects.equals(name, student.name) && age == student.age && Objects.equals(gender, student.gender);
}
@Override
public int hashCode() {
return Objects.hash(name, age, gender);
}
@Override
public String toString() {
return "{" +
" name='" + getName() + "'" +
", age='" + getAge() + "'" +
", gender='" + getGender() + "'" +
"}";
}
}
public class TreeSetDemo4 {
public static void main(String[] args) {
TreeSet<Student> treeset = new TreeSet<>(new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
return o1.getAge() - o2.getAge() == 0 ? o1.getName().compareTo(o2.getName()) : o1.getAge() - o2.getAge();
}
});
Student[] students = new Student[] {
new Student("张三", 18, "男"),
new Student("李四", 20, "男"),
new Student("王五", 18, "女"),
new Student("赵六", 20, "男"),
new Student("孙七", 18, "女"),
new Student("赵六", 20, "男"),
new Student("孙七", 18, "女")
};
initTreeSet(treeset, students);
traverseTreeSet(treeset);
}
private static void traverseTreeSet(TreeSet<Student> treeset) {
for (Student student : treeset) {
System.out.println(student + "\n");
}
}
private static void initTreeSet(TreeSet<Student> treeset, Student[] students) {
for (Student student : students) {
treeset.add(student);
}
}
}
运行结果
{ name='孙七', age='18', gender='女'}
{ name='张三', age='18', gender='男'}
{ name='王五', age='18', gender='女'}
{ name='李四', age='20', gender='男'}
{ name='赵六', age='20', gender='男'}
Collections
shuffleDemo 点击查看代码
package Collections.shuffle;
import java.util.*;
public class shufleDemo {
public static void main(String[] args) {
Integer[] numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9};
Collections.shuffle(Arrays.asList(numbers));
System.out.println(Arrays.toString(numbers));
}
}
运行结果
[2, 7, 8, 6, 4, 1, 5, 3, 9]
Sort
SortDemo1 点击查看代码
package Collections.Sort;
import java.util.*;
public class SortDemo1 {
public static void main(String[] args) {
Integer[] integers = new Integer[] { 9, 2, 8, 1, 5, 1 };
List<Integer> list = new ArrayList<>();
initList(list, integers);
Collections.sort(list);
System.out.println(list);
}
private static void initList(List<Integer> list, Integer[] integers) {
for (Integer integer : integers) {
list.add(integer);
}
}
}
运行结果
[1, 1, 2, 5, 8, 9]
SortDemo2 点击查看代码
package Collections.Sort;
import java.util.*;
class Student {
private String name;
private int age;
private String gender;
public Student() {
}
public Student(String name, int age, String gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return this.age;
}
public void setAge(int age) {
this.age = age;
}
public String getGender() {
return this.gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Student name(String name) {
setName(name);
return this;
}
public Student age(int age) {
setAge(age);
return this;
}
public Student gender(String gender) {
setGender(gender);
return this;
}
@Override
public boolean equals(Object o) {
if (o == this)
return true;
if (!(o instanceof Student)) {
return false;
}
Student student = (Student) o;
return Objects.equals(name, student.name) && age == student.age && Objects.equals(gender, student.gender);
}
@Override
public int hashCode() {
return Objects.hash(name, age, gender);
}
@Override
public String toString() {
return "{" +
" name='" + getName() + "'" +
", age='" + getAge() + "'" +
", gender='" + getGender() + "'" +
"}";
}
}
public class SortDemo2 {
public static void main(String[] args) {
List<Student> list = new ArrayList<>();
Student[] students = new Student[] {
new Student("张三", 18, "男"),
new Student("李四", 20, "男"),
new Student("王五", 18, "女"),
new Student("赵六", 20, "男"),
new Student("孙七", 18, "女"),
new Student("赵六", 20, "男"),
new Student("孙七", 18, "女")
};
initList(list, students);
Collections.sort(list,
Comparator.comparing(Student::getAge).thenComparing(Student::getName).thenComparing(Student::getGender));
traverseList(list);
}
private static void traverseList(List<Student> list) {
Iterator<Student> iterator = list.iterator();
while (iterator.hasNext()) {
Student student = iterator.next();
System.out.println(student + "\n");
}
}
private static void initList(List<Student> list, Student[] students) {
for (Student student : students) {
list.add(student);
}
}
}
运行结果
{ name='孙七', age='18', gender='女'}
{ name='孙七', age='18', gender='女'}
{ name='张三', age='18', gender='男'}
{ name='王五', age='18', gender='女'}
{ name='李四', age='20', gender='男'}
{ name='赵六', age='20', gender='男'}
{ name='赵六', age='20', gender='男'}
SortDemo3 点击查看代码
package Collections.Sort;
import java.util.*;
class Student {
private String name;
private int age;
private String gender;
public Student() {
}
public Student(String name, int age, String gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return this.age;
}
public void setAge(int age) {
this.age = age;
}
public String getGender() {
return this.gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Student name(String name) {
setName(name);
return this;
}
public Student age(int age) {
setAge(age);
return this;
}
public Student gender(String gender) {
setGender(gender);
return this;
}
@Override
public boolean equals(Object o) {
if (o == this)
return true;
if (!(o instanceof Student)) {
return false;
}
Student student = (Student) o;
return Objects.equals(name, student.name) && age == student.age && Objects.equals(gender, student.gender);
}
@Override
public int hashCode() {
return Objects.hash(name, age, gender);
}
@Override
public String toString() {
return "{" +
" name='" + getName() + "'" +
", age='" + getAge() + "'" +
", gender='" + getGender() + "'" +
"}";
}
}
public class SortDemo3 {
public static void main(String[] args) {
List<Student> list = new ArrayList<>();
Student[] students = new Student[] {
new Student("张三", 18, "男"),
new Student("李四", 20, "男"),
new Student("王五", 18, "女"),
new Student("赵六", 20, "男"),
new Student("孙七", 18, "女"),
new Student("赵六", 20, "男"),
new Student("孙七", 18, "女")
};
initList(list, students);
Collections.sort(list, new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
return o1.getAge() - o2.getAge() == 0 ? o1.getName().compareTo(o2.getName()) : o1.getAge() - o2.getAge();
}
});
traverseList(list);
}
private static void traverseList(List<Student> list) {
Iterator<Student> iterator = list.iterator();
while (iterator.hasNext()) {
Student student = iterator.next();
System.out.println(student + "\n");
}
}
private static void initList(List<Student> list, Student[] students) {
for (Student student : students) {
list.add(student);
}
}
}
运行结果
{ name='孙七', age='18', gender='女'}
{ name='孙七', age='18', gender='女'}
{ name='张三', age='18', gender='男'}
{ name='王五', age='18', gender='女'}
{ name='李四', age='20', gender='男'}
{ name='赵六', age='20', gender='男'}
{ name='赵六', age='20', gender='男'}
SortDemo4 点击查看代码
package Collections.Sort;
import java.util.*;
class Student implements Comparable<Student> {
private String name;
private int age;
private String gender;
public Student() {
}
public Student(String name, int age, String gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return this.age;
}
public void setAge(int age) {
this.age = age;
}
public String getGender() {
return this.gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Student name(String name) {
setName(name);
return this;
}
public Student age(int age) {
setAge(age);
return this;
}
public Student gender(String gender) {
setGender(gender);
return this;
}
@Override
public boolean equals(Object o) {
if (o == this)
return true;
if (!(o instanceof Student)) {
return false;
}
Student student = (Student) o;
return Objects.equals(name, student.name) && age == student.age && Objects.equals(gender, student.gender);
}
@Override
public int hashCode() {
return Objects.hash(name, age, gender);
}
@Override
public String toString() {
return "{" +
" name='" + getName() + "'" +
", age='" + getAge() + "'" +
", gender='" + getGender() + "'" +
"}";
}
@Override
public int compareTo(Student o) {
return this.age - o.getAge() == 0 ? this.name.compareTo(o.getName()) : this.age - o.getAge();
}
}
public class SortDemo4 {
public static void main(String[] args) {
List<Student> list = new ArrayList<>();
Student[] students = new Student[] {
new Student("张三", 18, "男"),
new Student("李四", 20, "男"),
new Student("王五", 18, "女"),
new Student("赵六", 20, "男"),
new Student("孙七", 18, "女"),
new Student("赵六", 20, "男"),
new Student("孙七", 18, "女")
};
initList(list, students);
traverseList(list);
}
private static void traverseList(List<Student> list) {
Iterator<Student> iterator = list.iterator();
while (iterator.hasNext()) {
Student student = iterator.next();
System.out.println(student + "\n");
}
}
private static void initList(List<Student> list, Student[] students) {
for (Student student : students) {
list.add(student);
}
}
}
运行结果
{ name='张三', age='18', gender='男'}
{ name='李四', age='20', gender='男'}
{ name='王五', age='18', gender='女'}
{ name='赵六', age='20', gender='男'}
{ name='孙七', age='18', gender='女'}
{ name='赵六', age='20', gender='男'}
{ name='孙七', age='18', gender='女'}
Search
SearchDemo 点击查看代码
package Search;
import java.util.*;
public class BinarySearch {
public static void main(String[] args) {
int[] array = new int[] { 9, 2, 8, 1, 5, 1, 4, 0, 2, 5, 6, 8 };
System.out.println("原数组:" + Arrays.toString(array));
Arrays.sort(array);
System.out.println("排序后:" + Arrays.toString(array));
int index1 = MyBinarySearch(array, 8);
System.out.println(8 + "在数组中的下标为" + index1);
int index2 = MyBinarySearch(array, 985);
System.out.println(index2);
}
private static int MyBinarySearch(int[] array, int targetNum) {
int min = 0;
int max = array.length - 1;
while (min <= max) {
int mid = (min + max) / 2;
if (array[mid] > targetNum) {
max = mid - 1;
}
if (array[mid] < targetNum) {
min = mid + 1;
}
if (array[mid] == targetNum) {
return mid;
}
}
return -1;
}
}
运行结果
原数组:[9, 2, 8, 1, 5, 1, 4, 0, 2, 5, 6, 8]
排序后:[0, 1, 1, 2, 2, 4, 5, 5, 6, 8, 8, 9]
8在数组中的下标为10
-1
Map
HashMap
HashMapDemo1 点击查看代码
package Map.HashMap;
import java.util.*;
public class HashMapDemo1 {
/*
* 底层结构是哈希表结构,具有键唯一,无序,特点
*/
// 键不能重复,值可以重复
public static void main(String[] args) {
HashMap<String, String> hashmap = new HashMap<>();
hashmap.put("319102020330", "李华");
hashmap.put("319102020331", "张三");
hashmap.put("319102020332", "李四");
hashmap.put("319102020333", "王五");
hashmap.put("319102020330", "政然");
hashmap.put("319102020331", "张三");
System.out.println(hashmap);
}
}
运行结果
{319102020333=王五, 319102020332=李四, 319102020331=张三, 319102020330=政然}
HashMapDemo2 点击查看代码
package Map.HashMap;
import java.util.*;
class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return this.age;
}
public void setAge(int age) {
this.age = age;
}
public Student name(String name) {
setName(name);
return this;
}
public Student age(int age) {
setAge(age);
return this;
}
@Override
public boolean equals(Object o) {
if (o == this)
return true;
if (!(o instanceof Student)) {
return false;
}
Student student = (Student) o;
return Objects.equals(name, student.name) && age == student.age;
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
@Override
public String toString() {
return "{" +
" name='" + getName() + "'" +
", age='" + getAge() + "'" +
"}";
}
}
public class HashMapDemo2 {
public static void main(String[] args) {
/*
* 存储数据,每位学生(姓名,年龄)都有自己的家庭住址。
* 学生和地址有对应关系,将学生对象和家庭住址存储到map集合中。学生作为键, 家庭住址作为值。
* 要求:学生姓名相同并且年龄相同视为同一名学生,不能重复存储
*/
/**
* 学生姓名 年龄 家庭住址
* 张美丽 18岁 北京市朝阳区阳光小区12号楼302室
* 王伟 20岁 上海市浦东新区海天花园8号楼506室
* 李磊 19岁 广州市天河区华景新城15号别墅
* 陈小芳 17岁 成都市武侯区锦江花园5栋104室
* 赵阳 21岁 南京市鼓楼区中山路22号公寓401室
*
*/
Student[] students = new Student[] {
new Student("张美丽", 18),
new Student("王伟", 20),
new Student("李磊", 19),
new Student("陈小芳", 17),
new Student("赵阳", 21),
new Student("张美丽", 18),
new Student("王伟", 20),
new Student("李磊", 19),
new Student("陈小芳", 17),
new Student("赵阳", 21)
};
String[] address = new String[] {
"北京市朝阳区阳光小区12号楼302室",
"上海市浦东新区海天花园8号楼506室",
"广州市天河区华景新城15号别墅",
"成都市武侯区锦江花园5栋104室",
"南京市鼓楼区中山路22号公寓401室",
"上海市徐汇区龙华路188号鸿运大厦15楼1503室",
"广州市越秀区农林路36号绿地中心18栋2201室",
"成都市高新区天府大道1980号华润中心3栋808室",
"深圳市福田区福虹路28号富士康大厦10楼1005室",
"杭州市西湖区文一西路78号西溪国际大厦5栋602室"
};
Map<Student, String> map = new HashMap<Student, String>();
initMap(map, students, address);
// 要达到去重效果,需要重写hashCode和equals方法
traverseMap(map);
}
private static void traverseMap(Map<Student, String> map) {
Set<Student> keySet = map.keySet();
for (Student student : keySet) {
System.out.println(student + " : " + map.get(student));
}
}
private static void initMap(Map<Student, String> map, Student[] students, String[] address) {
for (int i = 0; i < students.length; i++) {
Student student = students[i];
String adr = address[i];
map.put(student, adr);
}
}
}
运行结果
{ name='张美丽', age='18'} : 上海市徐汇区龙华路188号鸿运大厦15楼1503室
{ name='王伟', age='20'} : 广州市越秀区农林路36号绿地中心18栋2201室
{ name='李磊', age='19'} : 成都市高新区天府大道1980号华润中心3栋808室
{ name='赵阳', age='21'} : 杭州市西湖区文一西路78号西溪国际大厦5栋602室
{ name='陈小芳', age='17'} : 深圳市福田区福虹路28号富士康大厦10楼1005室
LinkedHashMap
LinkedHashMapDemo 点击查看代码
package Map.LinkedHashMap;
import java.util.*;
public class LinkedHashMapDemo1 {
/**
* 底层结构是有链表和哈希表结构,具有键唯一,有序特点
* LinkedHashMap类 , 底层采用的数据结构 : 链表+哈希表
* 特点 :
* 1 元素唯一
* 2 元素有序
*
* @param args
*/
public static void main(String[] args) {
Map<String, String> LinkedHashMap = new LinkedHashMap<>();
/*
* 学号: 2023001,姓名: 王小明
* 学号: 2023002,姓名: 李婷婷
* 学号: 2023003,姓名: 张阳
* 学号: 2023004,姓名: 赵鑫
* 学号: 2023005,姓名: 陈思思
*/
LinkedHashMap.put("2023001", "王小明");
LinkedHashMap.put("2023002", "李婷婷");
LinkedHashMap.put("2023003", "张阳");
LinkedHashMap.put("2023004", "赵鑫");
LinkedHashMap.put("2023005", "陈思思");
LinkedHashMap.put("2023004", "赵鑫");
LinkedHashMap.put("2023005", "陈思思");
System.out.println(LinkedHashMap);
Iterator<Map.Entry<String, String>> it = LinkedHashMap.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, String> entry = it.next();
System.out.println(entry.getKey() + " : " + entry.getValue());
}
}
}
运行结果
{2023001=王小明, 2023002=李婷婷, 2023003=张阳, 2023004=赵鑫, 2023005=陈思思}
2023001 : 王小明
2023002 : 李婷婷
2023003 : 张阳
2023004 : 赵鑫
2023005 : 陈思思
TreeMap
TreeMapDemo1 点击查看代码
package Map.TreeMap;
import java.util.*;
public class TreeMapDemo1 {
/*
* 底层是有红黑树,具有键唯一,排序特点
* TreeMap的底层是红黑树实现的,有排序的能力,键去重。
* 可以自然排序(键所在的类要实现Comparable)
* 若自定义类没有自然排序功能,或自然排序功能不满足要求时。可以自定义比较器排序(Comparator)
*
*/
public static void main(String[] args) {
// 自然排序
TreeMap<Integer, String> treeMap1 = new TreeMap<>();
treeMap1.put(3, "Three");
treeMap1.put(1, "One");
treeMap1.put(2, "Two");
System.out.println("自然排序:" + treeMap1);
// 自定义比较器排序
TreeMap<Integer, String> treeMap2 = new TreeMap<>((o1, o2) -> o2 - o1);
treeMap2.put(3, "Three");
treeMap2.put(1, "One");
treeMap2.put(2, "Two");
System.out.println("自定义比较器排序:" + treeMap2);
}
}
运行结果
自然排序:{1=One, 2=Two, 3=Three}
自定义比较器排序:{3=Three, 2=Two, 1=One}
TreeMapDemo2 点击查看代码
package Map.TreeMap;
import java.util.*;
class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return this.age;
}
public void setAge(int age) {
this.age = age;
}
public Student name(String name) {
setName(name);
return this;
}
public Student age(int age) {
setAge(age);
return this;
}
@Override
public boolean equals(Object o) {
if (o == this)
return true;
if (!(o instanceof Student)) {
return false;
}
Student student = (Student) o;
return Objects.equals(name, student.name) && age == student.age;
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
@Override
public String toString() {
return "{" +
" name='" + getName() + "'" +
", age='" + getAge() + "'" +
"}";
}
}
public class TreeMapDemo2 {
public static void main(String[] args) {
/*
* 需求:创建一个TreeMap集合,键是学生对象(Student),值是籍贯(String)。 学生属性姓名和年龄
* 要求按照年龄进行升序排序并遍历
*/
Student[] students = new Student[] {
new Student("张美丽", 18),
new Student("王伟", 20),
new Student("李磊", 19),
new Student("陈小芳", 17),
new Student("赵阳", 21),
};
String[] nativePlace = new String[] { "安徽安庆", "江苏无锡", "浙江杭州", "四川成都", "陕西咸阳" };
Map<Student, String> map = new TreeMap<>(new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
// TODO Auto-generated method stub
return o1.getAge() - o2.getAge();
}
});
initMap(map, students, nativePlace);
traverseMap(map);
}
private static void traverseMap(Map<Student, String> map) {
Set<Map.Entry<Student, String>> entries = map.entrySet();
for (Map.Entry<Student, String> entry : entries) {
System.out.println(entry);
}
}
private static void initMap(Map<Student, String> map, Student[] students, String[] nativePlace) {
for (int i = 0; i < nativePlace.length; i++) {
Student student = students[i];
String place = nativePlace[i];
map.put(student, place);
}
}
}
运行结果
{ name='陈小芳', age='17'}=四川成都
{ name='张美丽', age='18'}=安徽安庆
{ name='李磊', age='19'}=浙江杭州
{ name='王伟', age='20'}=江苏无锡
{ name='赵阳', age='21'}=陕西咸阳
MapTest
MapFunction 点击查看代码
package Map.Map;
import java.util.*;
/**
* - public V put(K key, V value): 把指定的键与指定的值添加到Map集合中。
* - public V remove(Object key): 把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的值。
* - public V get(Object key) 根据指定的键,在Map集合中获取对应的值。
* - public Set<K> keySet(): 获取Map集合中所有的键,存储到Set集合中。
* - public boolean containKey(Object key): 判断该集合中是否有此键
*/
public class MapDemo1 {
public static void main(String[] args) {
Map<String, String> map = new HashMap<String, String>();
map.put("中国科学技术大学", "张三");
map.put("南京航空航天大学", "李四");
map.put("北京航空航天大学", "王五");
map.put("南京邮电大学", "王二麻子");
map.put("北京外国语大学", "孙七");
map.put("首都对外经济贸易大学", "赵德柱");
traverseMap(map);
System.out.println("=========================================================================");
System.out.println(map.remove("南京邮电大学"));
System.out.println(map.get("首都对外经济贸易大学"));
Set<String> keySet = map.keySet();
System.out.println("所有学校名称:" + keySet);
System.out.println(map.containsKey("南京航空航天大学"));
map.entrySet().forEach(System.out::println);
}
private static void traverseMap(Map<String, String> map) {
for (String key : map.keySet()) {
System.out.println("学校名称:" + key + "\t\t\t\t\t 学生姓名:" + map.get(key));
}
}
}
运行结果
学校名称:北京航空航天大学 学生姓名:王五
学校名称:南京邮电大学 学生姓名:王二麻子
学校名称:中国科学技术大学 学生姓名:张三
学校名称:北京外国语大学 学生姓名:孙七
学校名称:首都对外经济贸易大学 学生姓名:赵德柱
学校名称:南京航空航天大学 学生姓名:李四
=========================================================================
王二麻子
赵德柱
所有学校名称:[北京航空航天大学, 中国科学技术大学, 北京外国语大学, 首都对外经济贸易大学, 南京航空航天大学]
true
北京航空航天大学=王五
中国科学技术大学=张三
北京外国语大学=孙七
首都对外经济贸易大学=赵德柱
南京航空航天大学=李四
MapTest 点击查看代码
package Map.Map;
import java.util.*;
public class MapTest {
public static void main(String[] args) {
/*
* 需求:字符串“aababcabcdabcde”
* 请统计字符串中每一个字符出现的次数,并按照以下格式输出
* 输出结果:
* a(5)b(4)c(3)d(2)e(1)
*
*/
/*
* Map集合中,键存字符,值存出现的次数
* 遍历字符串,得到每一个字符
* 到集合中看是否包含这个字符
* 如果不包含,表示是第一次出现
* 如果包含,表示不是第一次出现
*/
String str = new String("aababcabcdabcde");
HashMap<Character, Integer> hashmap = new HashMap<>();
for (int i = 0; i < str.length(); i++) {
char key = str.charAt(i);
if (!hashmap.containsKey(key)) {
hashmap.put(key, 1);
} else {
hashmap.put(key, hashmap.get(key) + 1);
}
}
Set<Character> keyset = hashmap.keySet();
for (Character character : keyset) {
System.out.print(character + "(" + hashmap.get(character) + ")");
}
}
}
运行结果
a(5)b(4)c(3)d(2)e(1)
TraverseMap 点击查看代码
package Map.Map;
import java.util.*;
public class TraverseMap {
public static void main(String[] args) {
/*
* 第一种遍历方式 : 键找值方式
*
*/
Map<String, String> map = new HashMap<>();
String[] strings1 = new String[] { "周瑜", "孙策", "刘备", "诸葛亮" };
String[] strings2 = new String[] { "大乔", "小乔", "孙尚香", "黄月英" };
initMap(map, strings1, strings2);
// 第一种遍历方式 : 键找值方式
fun1(map);
System.out.println("======================================================");
// 第二种遍历方式 : 键值对对象遍历
fun2(map);
}
private static void fun2(Map<String, String> map) {
// 第二种遍历方式 : 键值对对象遍历
Set<Map.Entry<String, String>> entrySet = map.entrySet();
for (Map.Entry<String, String> entry : entrySet) {
System.out.println(entry.getKey() + "-" + entry.getValue());
}
}
private static void initMap(Map<String, String> map, String[] strings1, String[] strings2) {
for (int i = 0, j = 0; i < strings1.length && j < strings2.length; i++, j++) {
map.put(strings1[i], strings2[j]);
}
}
private static void fun1(Map<String, String> map) {
// 第一种遍历方式 : 键找值方式
Set<String> keySet = map.keySet();
for (String key : keySet) {
System.out.println(key + "-" + map.get(key));
}
}
}
运行结果
刘备-孙尚香
孙策-小乔
诸葛亮-黄月英
周瑜-大乔
======================================================
刘备-孙尚香
孙策-小乔
诸葛亮-黄月英
周瑜-大乔
Nesting_of_sets
List_Nested_List
List_Nested_ListDemo 点击查看代码
package Nesting_of_sets.List_Nested_List;
import java.util.*;
public class List_Nested_List {
public static void main(String[] args) {
/*
* 使用场景举例:一年级有多个班级,每个班级有多名学生。要求保存每个班级的学生姓名,
* 保存一个年级所有的班级信息
*
* 思路:
* 可以使用List集合保存一个班级的学生
* 可以使用List集合保存所有班级
*
* 因此我们可以定义集合如下:
* 班级:List<String>
* 年级:List<List<String>>
*
*/
// 创建班级集合
List<String> class1Students = new ArrayList<>();
// 添加学生
class1Students.add("Tom");
class1Students.add("Jerry");
class1Students.add("Spike");
// 创建班级集合
List<String> class2Students = new ArrayList<>();
// 添加学生
Collections.addAll(class2Students, "Tyke", "Butch", "Quacker", "Daffy", "Judy");
// 年级
List<List<String>> gradeClassList = new ArrayList<>();
// 添加班级
Collections.addAll(gradeClassList, class1Students, class2Students);
traverseList(gradeClassList);
}
private static void traverseList(List<List<String>> gradeClassList) {
// 遍历年级集合
// 三种遍历方法
for (List<String> classes : gradeClassList) {
for (String stuName : classes) {
System.out.println("姓名:" + stuName);
}
System.out.println("====================");
}
}
}
运行结果
姓名:Tom
姓名:Jerry
姓名:Spike
====================
姓名:Tyke
姓名:Butch
姓名:Quacker
姓名:Daffy
姓名:Judy
====================
List_Nested_MapDemo
List_Nested_MapDemo 点击查看代码
package Nesting_of_sets.List_Nested_Map;
/*
*
* 使用场景举例:一年级有多个班级,每个班级有多名学生。要求保存每个班级的学生姓名,姓名有与之对应的学号,保存一年级所有的班级信息。
思路:
可以使用Map集合保存一个班级的学生(键是学号,值是名字)
可以使用List集合保存所有班级
因此我们可以定义集合如下:
班级:Map<String,String> 键是学号,值是姓名
年级:List<Map<String,String>>保存每个班级的信息
*/
import java.util.*;
public class List_Nested_Map {
public static void main(String[] args) {
Map<String, String> class1Students = new HashMap<>();
class1Students.put("001", "Tom");
class1Students.put("002", "Jerry");
class1Students.put("003", "Spike");
Map<String, String> class2Students = new HashMap<>();
class2Students.put("004", "Tyke");
class2Students.put("005", "Butch");
class2Students.put("006", "Quacker");
Map<String, String> class3Students = new HashMap<>();
class3Students.put("007", "Nibbles");
class3Students.put("008", "Sneezy");
class3Students.put("009", "Dopey");
List<Map<String, String>> gradeClasses = new ArrayList<>();
Collections.addAll(gradeClasses, class1Students, class2Students, class3Students);
traverseMap(gradeClasses);
}
private static void traverseMap(List<Map<String, String>> gradeClasses) {
for (Map<String, String> classStudents : gradeClasses) {
for (Map.Entry<String, String> entry : classStudents.entrySet()) {
System.out.println("学号:" + entry.getKey() + ",姓名:" + entry.getValue());
}
System.out.println("================================================");
}
for (Map<String, String> map : gradeClasses) {
Set<String> keySet = map.keySet();
for (String key : keySet) {
System.out.println("学号:" + key + ",姓名:" + map.get(key));
}
System.out.println("================================================");
}
}
}
运行结果
学号:001,姓名:Tom
学号:002,姓名:Jerry
学号:003,姓名:Spike
================================================
学号:004,姓名:Tyke
学号:005,姓名:Butch
学号:006,姓名:Quacker
================================================
学号:007,姓名:Nibbles
学号:008,姓名:Sneezy
学号:009,姓名:Dopey
================================================
学号:001,姓名:Tom
学号:002,姓名:Jerry
学号:003,姓名:Spike
================================================
学号:004,姓名:Tyke
学号:005,姓名:Butch
学号:006,姓名:Quacker
================================================
学号:007,姓名:Nibbles
学号:008,姓名:Sneezy
学号:009,姓名:Dopey
================================================
Map_Nested_Map
Map_Nested_MapDemo 点击查看代码
package Nesting_of_sets.Map_Nested_Map;
import java.util.*;
/*
*
* 使用场景举例:一个年级有多个班级,每个班级有多名学生。要求保存每个班级的学生姓名,姓名有与之对应的学号,保存一年级所有的班级信息,班级有与之对应的班级名称。
思路:
可以使用Map集合保存一个班级的学生(键是学号,值是名字)
可以使用Map集合保存所有班级(键是班级名称,值是班级集合信息)
因此我们可以定义集合如下:
班级: Map<String,String> 键:学号,值:姓名
年级: Map<String,Map<String,String>> 键:班级名称,值:具体班级信息
*/
public class Map_Nested_Map {
public static void main(String[] args) {
// 班级名称 Map<String, String> 键:学号,值:姓名
Map<String, Map<String, String>> gradeMap = new HashMap<>();
Map<String, String> class1Map = new HashMap<>();
class1Map.put("001", "Tom");
class1Map.put("002", "Jerry");
class1Map.put("003", "Spike");
class1Map.put("004", "Lily");
Map<String, String> class2Map = new HashMap<>();
class2Map.put("001", "Tyke");
class2Map.put("002", "Butch");
class2Map.put("003", "Toodles");
class2Map.put("004", "Quacker");
Map<String, String> class3Map = new HashMap<>();
class3Map.put("001", "Tuffy");
class3Map.put("002", "Puffy");
class3Map.put("003", "Fluffy");
class3Map.put("004", "Bubbles");
class3Map.put("005", "Buddy");
gradeMap.put("class1", class1Map);
gradeMap.put("class2", class2Map);
gradeMap.put("class3", class3Map);
traverseGradeMap(gradeMap);
}
private static void traverseGradeMap(Map<String, Map<String, String>> gradeMap) {
// for (Map.Entry<String, Map<String, String>> entry : gradeMap.entrySet()) {
// System.out.println("Class Name: " + entry.getKey());
// Map<String, String> classMap = entry.getValue();
// for (Map.Entry<String, String> studentEntry : classMap.entrySet()) {
// System.out.println("Student ID: " + studentEntry.getKey() + ", Student Name:
// " + studentEntry.getValue());
// }
// System.out.println("=============================================================");
// }
Set<String> keySet1 = gradeMap.keySet();// 拿到每个班级的名称
for (String className : keySet1) {
System.out.println("Class Name:" + className);
Set<String> keySet2 = gradeMap.get(className).keySet();// 拿到每个班级的学生信息
for (String studentId : keySet2) {
System.out.println("Student ID:" + studentId + ", Student Name:" + gradeMap.get(className).get(studentId));
}
System.out.println("=============================================================");
}
}
}
运行结果
Class Name:class3
Student ID:001, Student Name:Tuffy
Student ID:002, Student Name:Puffy
Student ID:003, Student Name:Fluffy
Student ID:004, Student Name:Bubbles
Student ID:005, Student Name:Buddy
=============================================================
Class Name:class2
Student ID:001, Student Name:Tyke
Student ID:002, Student Name:Butch
Student ID:003, Student Name:Toodles
Student ID:004, Student Name:Quacker
=============================================================
Class Name:class1
Student ID:001, Student Name:Tom
Student ID:002, Student Name:Jerry
Student ID:003, Student Name:Spike
Student ID:004, Student Name:Lily
=============================================================