排序处理
list比较器
Collections.sort(list, new Comparator<String>()
{
@Override
public int compare(String next, String prev) {
String[] nextarray = next.split("\\.");
String[] prevarray = prev.split("\\.");
int nextsum = 0;
int prevsum = 0;
for (int i = 0; i < nextarray.length; i++) {
nextsum += Integer.parseInt(nextarray[i]);
prevsum += Integer.parseInt(prevarray[i]);
}
if (prevsum < nextsum) {
return -1;
}
else {
return 0;
}
}
});
System.out.println(list.toString());
list冒泡排序
int len = list.size();
for (int i = 0; i < len - 1; i++) {
for (int j = 0; j < len - 1 - i; j++) {
String[] prevarray = list.get(j).split("\\.");
String[] nextarray = list.get(j + 1).split("\\.");
int prevsum = 0;
int nextsum = 0;
for (int k = 0; k < nextarray.length; k++) {
prevsum += Integer.parseInt(prevarray[k]);
nextsum += Integer.parseInt(nextarray[k]);
}
if (prevsum < nextsum) {
String temp = list.get(j);
list.set(j, list.get(j + 1));
list.set(j + 1, temp);
}
}
}
System.out.println(list.toString());
插入排序
for (int i = 1; i < len; i++) {
String data = list.get(i);
int dataNum = getSum(data);
int j = i - 1;
for (; j >= 0; j--) {
if (getSum(list.get(j)) < dataNum) {
list.set(j + 1, list.get(j));
}
else {
break;
}
}
list.set(j + 1, data);
}
System.out.println(list.toString());
优先级队列排序
Comparator Comparator = new Comparator<String>()
{
@Override
public int compare(String next, String prev) {
if (getSum(next) > getSum(prev)) {
return -1;
}
else {
return 0;
}
}
};
Queue<String> ipQueue = new PriorityQueue<String>(10, Comparator);
List<String> list = new ArrayList<>();
for (String string2 : strArray) {
if (check(string2) && !list.contains(string2)) {
ipQueue.offer(string2);
}
}
System.out.println(Arrays.toString(ipQueue.toArray()));
TreeMap排序
public class MyTreeMap {
public static void main(String[] args) {
Map<String, Integer> map = new TreeMap<String, Integer>();
map.put("c", 2);
map.put("ad", 1);
map.put("bc", 1);
map.put("abc", 3);
List<Map.Entry<String, Integer>> treeMapList =
new ArrayList<Map.Entry<String, Integer>>(map.entrySet());
System.out.println("排序前------------------");
for (int i = 0; i < treeMapList.size(); i++) {
String id = treeMapList.get(i).toString();
System.out.println(id);
}
Collections.sort(treeMapList, new Comparator<Map.Entry<String, Integer>>() {
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
return (o2.getKey()).toString().compareTo(o1.getKey());
}
});
System.out.println("key倒序排列------------------");
for (int i = 0; i < treeMapList.size(); i++) {
String id = treeMapList.get(i).toString();
System.out.println(id);
}
Collections.sort(treeMapList, new Comparator<Map.Entry<String, Integer>>() {
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
return (o2.getValue() - o1.getValue());
}
});
System.out.println("value倒序排列------------------");
for (int i = 0; i < treeMapList.size(); i++) {
String id = treeMapList.get(i).toString();
System.out.println(id);
}
}
实例
package com.epoint.ga.a20220407;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.PriorityQueue;
import java.util.TreeMap;
import java.util.TreeSet;
import java.util.regex.Pattern;
public class Test
{
static String valid = "[0-9\\.,]*";
public static void main(String[] args) {
String str = "1.4.5.6,6.5.6.56.3,8.8.8.8,0.0.0.0,0.0.0.0";
if (!checkValid(str)) {
System.out.println("no pass....");
return;
}
String[] ipArray = str.split(",");
mapToListSort(ipArray);
}
public static void mapToListSort(String[] ipArray) {
Map<String, String> map = new HashMap<>();
for (String ip : ipArray) {
if (checkIP(ip)) {
map.put(ip, ip);
}
}
List<Map.Entry<String, String>> list = new ArrayList<>(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<String, String>>()
{
@Override
public int compare(Map.Entry<String, String> o1, Map.Entry<String, String> o2) {
if (getSum(o1.getKey()) > getSum(o2.getKey())) {
return -1;
}
else if (getSum(o1.getKey()) < getSum(o2.getKey())) {
return 1;
}
return 0;
}
});
System.out.println(list.toString());
}
public static void queueSort(String[] ipArray) {
PriorityQueue<String> queue = new PriorityQueue<>(new Comparator<String>()
{
@Override
public int compare(String o1, String o2) {
if (getSum(o1) > getSum(o2)) {
return -1;
}
else if (getSum(o1) < getSum(o2)) {
return 1;
}
return 0;
}
});
for (String ip : ipArray) {
if (checkIP(ip) && !queue.contains(ip)) {
queue.offer(ip);
}
}
while (!queue.isEmpty()) {
System.out.println(queue.poll());
}
}
public static void mapSort(String[] ipArray) {
TreeMap<String, String> treeMap = new TreeMap<String, String>(new Comparator<String>()
{
@Override
public int compare(String o1, String o2) {
if (getSum(o1) > getSum(o2)) {
return -1;
}
else if (getSum(o1) < getSum(o2)) {
return 1;
}
return 0;
}
});
for (String ip : ipArray) {
if (checkIP(ip)) {
treeMap.put(ip, ip);
}
}
System.out.println(Arrays.toString(treeMap.keySet().toArray()));
;
}
public static void setSort(String[] ipArray) {
TreeSet<String> set = new TreeSet<>(new Comparator<String>()
{
@Override
public int compare(String o1, String o2) {
if (getSum(o1) > getSum(o2)) {
return -1;
}
else if (getSum(o1) < getSum(o2)) {
return 1;
}
return 0;
}
});
for (String ip : ipArray) {
if (checkIP(ip)) {
set.add(ip);
}
}
System.out.println(Arrays.toString(set.toArray()));
StringBuilder builder = new StringBuilder();
builder.append("[");
for (String s : set) {
builder.append(s + ",");
}
String str = builder.toString();
str = str.substring(0, str.length() - 1) + "]";
System.out.println(str);
System.out.println();
System.out.print("[");
for (int i = 0, len = set.size(); i < len; i++) {
System.out.print(set.pollFirst());
if (i != len - 1) {
System.out.print(",");
}
}
System.out.print("]");
}
private static void listSort(String[] ipArray) {
List<String> ipList = new ArrayList<>();
for (String ip : ipArray) {
if (checkIP(ip) && !ipList.contains(ip)) {
ipList.add(ip);
}
}
Collections.sort(ipList, new Comparator<String>()
{
@Override
public int compare(String o1, String o2) {
if (getSum(o1) > getSum(o2)) {
return -1;
}
else if (getSum(o1) < getSum(o2)) {
return 1;
}
return 0;
}
});
System.out.println(ipList.toString());
}
private static void chaRuSort(String[] ipArray) {
List<String> ipList = new ArrayList<>();
for (String ip : ipArray) {
if (checkIP(ip) && !ipList.contains(ip)) {
ipList.add(ip);
}
}
int len = ipList.size();
for (int i = 0; i < len; i++) {
int data = getSum(ipList.get(i));
String dataStr = ipList.get(i);
int j = i - 1;
for (; j >= 0; j--) {
if (getSum(ipList.get(j)) < data) {
ipList.set(j + 1, ipList.get(j));
}
else {
break;
}
}
ipList.set(j + 1, dataStr);
}
System.out.println(ipList.toString());
}
private static void maaoPaoSort(String[] ipArray) {
List<String> ipList = new ArrayList<>();
for (String ip : ipArray) {
if (checkIP(ip) && !ipList.contains(ip)) {
ipList.add(ip);
}
}
int listLen = ipList.size();
boolean hasSort = false;
for (int i = 0; i < listLen - 1; i++) {
for (int j = 0; j < listLen - 1 - i; j++) {
String temp;
if (getSum(ipList.get(j)) < getSum(ipList.get(j + 1))) {
temp = ipList.get(j);
ipList.set(j, ipList.get(j + 1));
ipList.set(j + 1, temp);
hasSort = true;
}
}
if (!hasSort) {
break;
}
}
System.out.println(ipList.toString());
}
public static int getSum(String str) {
String[] split = str.split("\\.");
int sum = 0;
for (String s : split) {
sum += Integer.parseInt(s);
}
return sum;
}
public static boolean checkIP(String ip) {
String[] ipnum = ip.split("\\.");
int len = ipnum.length;
if (len == 4) {
for (int i = 0; i < len; i++) {
if (!validNum(ipnum[i])) {
System.out.println("存在非数字");
return false;
}
int num = Integer.parseInt(ipnum[i]);
if (num < 0 && num > 255) {
return false;
}
}
}
return true;
}
public static boolean checkValid(String s) {
Pattern compile = Pattern.compile("[0-9,\\.]*");
if (compile.matcher(s).matches()) {
System.out.println("pattern 验证");
return true;
}
if (s.matches(valid)) {
System.out.println("String 验证");
return true;
}
return false;
}
public static boolean validNum(String s) {
if ("".equals(s) || !Character.isDigit(s.charAt(0))) {
System.out.println("非数字校验");
return false;
}
return true;
}
}