java 中vector 排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 中vector 排序相关的知识,希望对你有一定的参考价值。

Vector1中装有("hmm","2");
Vector2中装有("we","5");
Vector3中装有("de","3");
将这三个Vector以各自中的第二个数排序,排后结果为:
Vector2 ("we","5");
Vector3("de","3");
Vector1中装有("hmm","2");
怎么做,谢谢!

自定义排序吧,自己写一个比较子, 实现Comparator借口, 在比较子之中实现自己的比较规则。将所有的需要排序的vector放入到一个List之中,然后调用Collections的sort方法进行排序。

下面是实现的代码。

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Vector;
public class TestSort 
 public static final Comparator<Vector<String>> VECTOR_COMPARATOR = new Comparator<Vector<String>>() 
  @Override
  public int compare(Vector<String> v1, Vector<String> v2) 
   if (v1 == null || v1.size() < 2) 
    return -1;
   
   if (v2 == null || v2.size() < 2) 
    return 1;
   
   return Integer.valueOf(v2.get(1)) - Integer.valueOf(v1.get(1));
  
 ;
 public static void main(String[] args) 
  Vector<String> v1 = new Vector<String>();
  Vector<String> v2 = new Vector<String>();
  Vector<String> v3 = new Vector<String>();
  v1.add("hmm");
  v1.add("2");
  v2.add("we");
  v2.add("5");
  v3.add("de");
  v3.add("3");
  List<Vector<String>> vList = new ArrayList<Vector<String>>();
  vList.add(v1);
  vList.add(v2);
  vList.add(v3);
  Collections.sort(vList, VECTOR_COMPARATOR);
  System.out.println(vList);
 

 

最后输出的结果是:

[[we, 5], [de, 3], [hmm, 2]]

追问

如果不是3个Vector,而是成万上千个,那么这么排序方法还合适吗?效率

追答

当然合适啊。 几万个数据用这样的排序很轻松就能搞定的。

参考技术A 因为vector装的不是同一个对象,所以不能用写比较器的方法实现;
既然指定是第二个值,剩下的就是三个数比较大小了。
参考技术B 就3个数,而且你知道,不是很简单吗?你知道提取Vectorn[1]来进行匹配就行了,如果是2就排最后,5就排第一

c++用sort对vector排序问题

#include<string>
#include<algorithm>
#include <vector>
using namespace std;
vector<string> a;
int n = 7;
bool compare(string a, string b)

for(int i = 0; i < n - 1; ++ i)

if(a[i] < b[i])
return true;

return false;

int main()

a.push_back("+-+--+");
a.push_back("-+-+--");
a.push_back("- ++ ");
a.push_back("- ++++");
sort(a.begin(), a.end(), compare);
return 0;


运行时错误,请问怎么回事。。。
就是sort那里中断了,我的是VS2010,出错信息是在 a[i] < b[i] 那里,无效的运算符 < ,我是想按照ASCII码大小来比较string中的每一位

把a[i] 和 b[i] 进行强制类型转化为int
或者直接 通过string 里面重载<
#include<string>
#include<algorithm>
#include <vector>
using namespace std;
vector<string> a;
int n = 7;
bool compare(string a, string b)

if(a<b)
return true;
return false;

int main()

a.push_back("+-+--+");
a.push_back("-+-+--");
a.push_back("- ++ ");
a.push_back("- ++++");
sort(a.begin(), a.end(), compare);
return 0;
参考技术A 应该是字符串长度不够,导致越界,直接用string的compare函数即可
return a.compare(b);
参考技术B 我在我的电脑上编译执行了,程序没有错,所以应该是你的电脑环境有问题。
你可以单步调试你的程序,看是哪一行出错了。追问

就是sort那里中断了,我的是VS2010,出错信息是在 a[i] < b[i] 那里,无效的运算符 < ,我是想按照ASCII码大小来比较string中的每一位

追答

我搜看了一下,sort你要传递一个函数给他,但是这个函数不是普通的函数(function),而是仿函数(functor),仿函数是C++编程里的一个概念,就是说,一个类,它内部重载了小括号运算符,就称为仿函数。

建议你搜一下 STL sort 中的比较函数 ,看看别人怎么写的仿函数。

本回答被提问者采纳
参考技术C 用DIRECTX技术 参考技术D vc6没有问题

以上是关于java 中vector 排序的主要内容,如果未能解决你的问题,请参考以下文章

c++用sort对vector排序问题

c++用sort对vector排序问题

c++小白求助!用sort对vector排序的问题

Vector容器 二维数组sort()排序

Java Swing实现展示数据,以及过滤排序

java中的treeSet中文排序