有一个集合 内部保存了N个对象,对象内部有一个int类型属性,
其中必定有三个对象的属性相邻且相等
例如:{5,7,8,8,8,10,11}
现在要求排列为这种类型{8,8,8,11,10,7,5}
三个相等属性的对象排列在最前面 其他的以从大到小方式排序,
如何计算?
先用排序法将数组以从大到小的方式排列,一个for循环开始相邻两个字符创匹配,没有就加1,相同则把位置和值记下来,对前面的用位移,右移3位,然后将记录下来的值赋给前三个,大概思路就这样
算法思路:
1、列表的元素需要实现 Comparable 可以使用工具类继续排序。
2、重写 toString 方法。
3、先用普通排序对列表进行排序
4、再查找属性相同的元素的下标
5、定义一个最终的列表,先放入属性相同的三个元素,在将剩余的元素加入。
完整代码:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class DataNum implements Comparable<DataNum>{
int count = 0;
/**
*
* @param count
*/
public DataNum(int count) {
this.count = count;
}
@Override
public int compareTo(DataNum o) {
return o.count - this.count;
}
public void setCount(int count) {
this.count = count;
}
@Override
public String toString() {
return count + "";
}
public static void main(String[] args) {
List<DataNum> list = new ArrayList<DataNum>();
DataNum n1 = new DataNum(5);
DataNum n2 = new DataNum(7);
DataNum n3 = new DataNum(8);
DataNum n4 = new DataNum(8);
DataNum n5 = new DataNum(8);
DataNum n6 = new DataNum(10);
DataNum n7 = new DataNum(11);
list.add(n1);
list.add(n2);
list.add(n3);
list.add(n4);
list.add(n5);
list.add(n6);
list.add(n7);
Collections.sort(list);
System.out.println("First sort result:"+list);
//再查找属性相同的下标
int tempIndex =0;
for(int i=0;i<list.size()-3;i++) {
DataNum first = list.get(i);
DataNum second = list.get(i+1);
DataNum third = list.get(i+2);
if(first.compareTo(second)==0 && first.compareTo(third)==0) {
tempIndex = i;
break;
}
}
System.out.println("same index is:"+tempIndex);
//重新定义一个列表,先放入相邻的三个,再将剩余的放入
List<DataNum> last = new ArrayList<DataNum>();
last.add(list.get(tempIndex));
last.add(list.get(tempIndex+1));
last.add(list.get(tempIndex+2));
for(int i=0;i<tempIndex;i++) {
last.add(list.get(i));
}
for(int i=tempIndex+3;i<list.size();i++) {
last.add(list.get(i));
}
//打印
System.out.println("Last sort result:"+last);
}
}
运行结果:
First sort result:[11, 10, 8, 8, 8, 7, 5]
same index is:2
Last sort result:[8, 8, 8, 11, 10, 7, 5]
String string = "5,7,8,8,8,10,11";
List<Integer> list = new ArrayList<>();
if (!StringUtils.isEmpty(string)) {
String[] strs = string.split(",");
for (String s : strs) {
list.add(Integer.valueOf(s.trim()));
}
}
System.out.println(list);
Collections.sort(list);
System.out.println(list);
List<Integer> numList= new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
int num = list.get(i);
if (list.indexOf(num) != list.lastIndexOf(num)) {
numList.add(num);
}
}
for (int i = 0; i < list.size(); i++) {
int num = list.get(i);
if(!numList.contains(num)) {
numList.add(num);
}
}
System.out.println(numList);