1-找出这组数据中最大的数[1-3-8-9-4-5-8],要求:(1)用冒泡排序法计算,(2)自己写一个解决这个问题的代码。
// An highlighted block
package test.work.sort;
/*1-找出这组数据中最大的数[1-3-8-9-4-5-8],要求:(1)用冒泡排序法计算,
(2)自己写一个解决这个问题的代码。*/
public class Main {
/**
* 方法1:冒泡排序
* @param a
*/
public static void sort(int[] a){
int temp;
boolean b = true;
for(int i=0;i<a.length;i++){
b = true;
for(int j=0;j<(a.length-1-i);j++){
if(a[j]-a[j+1]>0){
b= false;
temp = a[j+1];
a[j+1] = a[j];
a[j] =temp;
}
}
if(b){
break;
}
}
}
/**
* 方法2
* @param a
* @return max
*/
public static int getMax(int[] a){
int max = a[0];
for(int i=1;i<a.length;i++){
if(max<a[i]){
max = a[i];
}
}
return max;
}
public static void main(String[] args) {
int[] arr = {1,3,8,9,4,5,8};
sort(arr);
int max = arr[arr.length-1];
int maxs = getMax(arr);
System.out.println(max);
System.out.println(maxs);
}
}
2-compareTo 函数总结
如果是数字,compareTo 用来比较2个数的大小;如果是字符串就比首字母的大小(ASCII码值),首字母相同就比第二个字母,以此类推;第一个数大于第二个数返回1,小于返回-1,等于返回0
// An highlighted block
package test.work.sort;
public class Test01 {
public static void main(String[] args) {
Integer a1 = 5;
Integer b1 = 6;
System.out.println(a1.compareTo(b1));//-1
String a2 = "ac";
String b2 = "ab";
System.out.println(a2.compareTo(b2));//1
Double a3 = 2.3;
Double b3 = 2.3;
System.out.println(a3.compareTo(b3));//0
}
}
3-Connections.sort 总结(升序和降序).
Connections.sort(List list) 的源码,默认按照升序排序
采用默认排序
// An highlighted block
package test.work.sort;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class Test01 {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(4);
list.add(2);
list.add(6);
Collections.sort(list);
System.out.println(Arrays.toString(list.toArray()));
}
}
打印结果:
sort(List list, Comparator<? super T> c)的源码,可以自定义一个Comparator实现类排序
下面自定义1个实现类来排序
// An highlighted block
package test.work.sort;
import java.util.Comparator;
public class TestCollections implements Comparator<Integer>{
@Override
public int compare(Integer o1, Integer o2) {
return -(o1-o2);//降序
}
}
// An highlighted block
package test.work.sort;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class Test01 {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(4);
list.add(2);
list.add(6);
Collections.sort(list,new TestCollections());
System.out.println(Arrays.toString(list.toArray()));
}
}
打印结果:
4-TreeSet和TreeMap 总结,要求有代码辅助总结.
1、TreeSet提供1个有序的Set集合,共有2中排序方式;
2、TreeSet在添加的时候排序,若添加后再修改元素内容,则不改变排序
代码解释:
实体类News
// An highlighted block
package test.work.sort;
public class News implements Comparable<News>{
private String title;
private Integer hit;
public News(){}
public News(String title, Integer hit) {
super();
this.title = title;
this.hit = hit;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public Integer getHit() {
return hit;
}
public void setHit(Integer hit) {
this.hit = hit;
}
@Override
public int compareTo(News o) {
return (this.hit-o.hit)==0?0:((this.hit-o.hit)>0?1:-1);
}
}
第一种排序:自然排序,这种排序要求TreeSet里添加的类必须实现Comparable接口,否则运行会报错
// An highlighted block
package test.work.sort;
import java.util.TreeSet;
public class App {
public static void main(String[] args) {
/**
* 按照News的hit大小排序
*/
TreeSet<News> ts = new TreeSet<News>();
ts.add(new News("news1aaa",100));
ts.add(new News("news2aa",80));
ts.add(new News("news3a",200));
ts.add(new News("news4",120));
for(News n :ts){
System.out.println(n.getTitle()+"------"+n.getHit());
}
}
}
打印结果:news2aa------80
news1aaa------100
news4------120
news3a------200
第二种排序:自定义排序
// An highlighted block
package test.work.sort;
import java.util.TreeSet;
public class App {
public static void main(String[] args) {
TreeSet<News> ts = new TreeSet<News>(
new java.util.Comparator<News>(){
/**
*按照News的title字符长度排序
*/
@Override
public int compare(News o1, News o2) {
return (o1.getTitle().length()-o2.getTitle().length())==0?
0:((o1.getTitle().length()-o2.getTitle().length())>0?1:-1);
}
});
ts.add(new News("news1aaa",100));
ts.add(new News("news2aa",80));
ts.add(new News("news3a",200));
ts.add(new News("news4",120));
for(News n :ts){
System.out.println(n.getTitle()+"------"+n.getHit());
}
}
}
打印结果:news4------120
news3a------200
news2aa------80
news1aaa------100
2、TreeSet在添加的时候排序,若添加后再修改元素内容,则不改变排序
// An highlighted block
package test.work.sort;
import java.util.TreeSet;
public class App {
public static void main(String[] args) {
TreeSet<News> ts = new TreeSet<News>();
News n1 = new News("news1aaa",100);
News n2 = new News("news2aa",80);
News n3 = new News("news3a",200);
News n4 = new News("news4",120);
ts.add(n1);
ts.add(n2);
ts.add(n3);
ts.add(n4);
for(News n :ts){
System.out.println(n.getTitle()+"------"+n.getHit());
}
n1.setHit(10);
System.out.println("========================");
for(News n :ts){
System.out.println(n.getTitle()+"------"+n.getHit());
}
}
}
打印结果:news2aa------80
news1aaa------100
news4------120
news3a------200
========================
news2aa------80
news1aaa------10
news4------120
news3a------200
TreeMap:根据键值排序,排序方式跟TreeSet同理,有2种排序方式,在添加元素时排序,添加完元素再改动元素,不改变排序。
// An highlighted block
package test.work.sort;
import java.util.Map.Entry;
import java.util.TreeMap;
public class TestTreeMap {
public static void main(String[] args) {
TreeMap<News,String> map = new TreeMap<News,String>();
News n1 = new News("news1aaa",100);
News n2 = new News("news2aa",80);
News n3 = new News("news3a",200);
News n4 = new News("news4",120);
map.put(n1, "aaa");
map.put(n2, "aaa");
map.put(n3, "aaa");
map.put(n4, "aaa");
for(Entry<News,String> entry : map.entrySet()){
System.out.println(entry.getKey().getTitle()+entry.getKey().getHit());
}
}
}
打印结果:news2aa---80
news1aaa---100
news4---120
news3a---200
通过TreeSet的底层代码也能看出,TreeSet其实就是通过TreeMap容器来实现的。
5-TreeSet实现代码:实体类实现Comparable接口,按照实体类的某一列排序(升序),并将排序后的结果集打印.
见上一段代码
6-TreeSet实现代码:实体类存放到TreeSet容器中,使用Comparator排序(降序)的业务类(匿名内部类).
// An highlighted block
package test.work.sort;
import java.util.Comparator;
import java.util.TreeSet;
public class App {
public static void main(String[] args) {
TreeSet<News> ts = new TreeSet<News>(new Comparator<News>() {
/**
* 匿名内部类
* @param o1
* @param o2
* @return -1,1,0
*/
@Override
public int compare(News o1, News o2) {
return o1.getHit()-o2.getHit()==0?
0:(o1.getHit()-o2.getHit()<0?1:-1);
}
});
News n1 = new News("news1aaa",100);
News n2 = new News("news2aa",80);
News n3 = new News("news3a",200);
News n4 = new News("news4",120);
ts.add(n1);
ts.add(n2);
ts.add(n3);
ts.add(n4);
for(News n :ts){
System.out.println(n.getTitle()+"------"+n.getHit());
}
}
}
打印结果:news3a------200
news4------120
news1aaa------100
news2aa------80
7-TreeMap实现代码:实体类存放到TreeMap容器中,使用Comparator排序(降序)的业务类(匿名内部类).
// An highlighted block
package test.work.sort;
import java.util.Map.Entry;
import java.util.Comparator;
import java.util.TreeMap;
public class TestTreeMap {
public static void main(String[] args) {
TreeMap<News,String> map = new TreeMap<News,String>(new Comparator<News>() {
/**
* 匿名内部类
* @param o1
* @param o2
* @return 0、1、-1
*/
@Override
public int compare(News o1, News o2) {
int len1 = o1.getTitle().length();
int len2 = o2.getTitle().length();
return -(len1-len2);//按照字符长度降序
}
});
News n1 = new News("news1aaa",100);
News n2 = new News("news2aa",80);
News n3 = new News("news3a",200);
News n4 = new News("news4",120);
map.put(n1, "aaa");
map.put(n2, "aaa");
map.put(n3, "aaa");
map.put(n4, "aaa");
for(Entry<News,String> entry : map.entrySet()){
System.out.println(entry.getKey().getTitle()+"---"+entry.getKey().getHit());
}
}
}
打印结果:news1aaa---100
news2aa---80
news3a---200
news4---120
8-Collections.shuffle 和 Collections.reverse 掌握用法。
// An highlighted block
package test.work.sort;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class TestCollections {
/**
* Collections.shuffle 和 Collections.reverse 掌握用法。
* @param args
*/
public static void main(String[] args) {
// shuffle();
reverse();
}
/**
* 集合元素反转
*/
public static void reverse(){
List<String> list = new ArrayList<String>();
//list添加A-Z
for(char i ='A';i<='Z';i++){
list.add(i+"");
}
//正序打印
for(int i=0;i<list.size();i++){
System.out.print(list.get(i)+" ");
}
System.out.println();
//反转后再打印
Collections.reverse(list);
for(int i=0;i<list.size();i++){
System.out.print(list.get(i)+" ");
}
}
打印结果:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
Z Y X W V U T S R Q P O N M L K J I H G F E D C B A
/**
* 模拟斗地主 洗牌、发牌
*/
public static void shuffle(){
List<String> list = new ArrayList<String>();
Map<Integer,String> map = new HashMap<Integer,String>();
map.put(0, "红桃");
map.put(1, "黑桃");
map.put(2, "方块");
map.put(3, "梅花");
for(int i=0;i<4;i++){
for(int j=1;j<14;j++){
list.add(map.get(i)+j);
}
}
list.add("大王");
list.add("小王");
//洗牌
Collections.shuffle(list);
//发牌
List<String> list1 = new ArrayList<String>();
List<String> list2 = new ArrayList<String>();
List<String> list3 = new ArrayList<String>();
for(int j=0;j<list.size()-5;j+=3){
list1.add(list.get(j));
list2.add(list.get(j+1));
list3.add(list.get(j+2));
}
System.out.println("第一家:"+Arrays.toString(list1.toArray()));
System.out.println("第二家:"+Arrays.toString(list2.toArray()));
System.out.println("第三家:"+Arrays.toString(list3.toArray()));
System.out.print("底牌:");
for(int i=0;i<3;i++){
System.out.print(list.get(list.size()-1-i)+" ");
}
}
打印结果:
第一家:[红桃8, 方块5, 方块4, 红桃13, 梅花11, 梅花3, 梅花12, 黑桃11, 方块3, 梅花7, 梅花13, 黑桃9, 梅花10, 方块10, 方块1, 梅花6, 黑桃10]
第二家:[黑桃3, 红桃10, 红桃7, 黑桃4, 黑桃2, 方块11, 黑桃1, 梅花8, 红桃11, 红桃5, 大王, 方块2, 红桃9, 红桃1, 梅花5, 红桃4, 红桃12]
第三家:[红桃6, 黑桃8, 方块13, 方块8, 黑桃12, 黑桃6, 黑桃5, 方块6, 黑桃7, 梅花1, 梅花2, 方块12, 梅花9, 方块9, 红桃2, 梅花4, 黑桃13]
底牌:方块7 小王 红桃3
}