有一个Vector里面存放一组值,我想取出尽量三组不同的值,请熟悉的人给发方法,多谢

dreamingdan 2009-08-07 10:49:59
下面是我写的方法,但感觉应该是不多,请高手指点一下,最后也能写出代码,谢谢:
public static String[] getElementFromVector(Vector vector){
int i = 0;
String str[] = null;
String strData[] = null;
str = new String[15];
strData = new String[3];

Enumeration e = vector.elements();
while(e.hasMoreElements()){
str[i] = (String)e.nextElement();
if(str[i].compareTo(str[i-1])>0){
strData[i] = str[i];
}
else
strData[i] = str[i-1];

i++;
}

return strData;
}
...全文
163 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunnyfun888 2009-08-07
  • 打赏
  • 举报
回复
Map应该有吧
简化一下算法:

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Vector;

public class Test4{
public static void main(String[] args){
Vector<String> myVector;
String[] result;

myVector=new Vector<String>(Arrays.asList("1","1","1","1","3","4","1"));
result=getElementFromVector(myVector,3);
System.out.println(Arrays.toString(result));

myVector=new Vector<String>(Arrays.asList("1","1","1","1","1","4","1"));
result=getElementFromVector(myVector,3);
System.out.println(Arrays.toString(result));

myVector=new Vector<String>(Arrays.asList("1","1","1","1","1","1","1"));
result=getElementFromVector(myVector,3);
System.out.println(Arrays.toString(result));

}
public static String[] getElementFromVector(Vector<String> vector,int count){
String[] result=new String[count];

Map<String, Integer> myMap = new HashMap<String, Integer>();
for(String str:vector){
if(myMap.get(str) == null){
myMap.put(str, 1);
}else{
myMap.put(str, myMap.get(str) + 1);
}
}

while (count > 0){
for(String str : myMap.keySet()){
if(count <= 0){
break;
}
if(myMap.get(str) > 0){
result[--count]= str;
myMap.put(str, myMap.get(str) - 1);
}
}
}
return result;
}

}

bigbug9002 2009-08-07
  • 打赏
  • 举报
回复
j2me不支持Map?
bigbug9002 2009-08-07
  • 打赏
  • 举报
回复
import java.util.*;

public class Test4{
public static void main(String[] args){
Vector<String> myVector1=new Vector<String>(Arrays.asList("4","1","1","1","1","1","1"));
Vector<String> myVector2=new Vector<String>(Arrays.asList("1","1","3","1","2","4","1"));
String[] result1=getElementFromVector(myVector1,3);
String[] result2=getElementFromVector(myVector2,3);
System.out.println(Arrays.toString(result1));
System.out.println(Arrays.toString(result2));

}
public static String[] getElementFromVector(Vector<String> vector,int count){
Map<String,Integer> myMap=new HashMap<String,Integer>();
for(int i=0;i<vector.size();i++){
myMap.put(vector.get(i),i);
}
String[] result=new String[count];
int index=count-1;
for(String str:myMap.keySet()){
if(index<0){
break;
}
result[index--]=str;
}
if(index>=0){
boolean isAll=false;
for(int i=0;i<vector.size()&&!isAll;i++){
for(int j=count-1;j>index;j--){
String str=vector.get(i);
if(str.equals(result[j])&&myMap.get(str).intValue()!=i){
result[index--]=str;
if(index<0){
isAll=true;
break;
}
}
}
}
}
return result;
}

}

这个应该是没有问题的.
dreamingdan 2009-08-07
  • 打赏
  • 举报
回复
我是在J2ME下写的,所以最好是用String ,String[], Vector来实现,其他的类型怕是不支持
sunnyfun888 2009-08-07
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 bigbug9002 的回复:]
有bug.等一下.
[/Quote]
刚想说
遇到
1,1,1,1,1,1,1,4,1那就从114取三个
1,1,1,1,1,1,1,1,1那就从111中取三个
就不对了
bigbug9002 2009-08-07
  • 打赏
  • 举报
回复
有bug.等一下.
bigbug9002 2009-08-07
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 qiangtien 的回复:]
bigbug9002谢谢你的热心帮忙啊,那么我上面的实现方法有问题吗?
[/Quote]
我看不懂你的代码,下面是我的代码,我估计你也看不懂我的代码.
好在我的代码能出来结果:
import java.util.*;

public class Test4{
public static void main(String[] args){
Vector<String> myVector1=new Vector<String>(Arrays.asList("1","1","1","1","1","4","1"));
Vector<String> myVector2=new Vector<String>(Arrays.asList("1","1","3","1","2","4","1"));
String[] result1=getElementFromVector(myVector1,3);
String[] result2=getElementFromVector(myVector2,3);
System.out.println(Arrays.toString(result1));
System.out.println(Arrays.toString(result2));

}
public static String[] getElementFromVector(Vector<String> vector,int count){
Set<String> mySet=new HashSet<String>(vector);
String[] result=new String[count];
int index=count-1;
for(String str:mySet){
if(index<0){
break;
}
result[index--]=str;
}
if(index>=0){
for(String str:vector){
result[index--]=str;
if(index<0){
break;
}
}
}
return result;
}

}


F:\java>java Test4
[1, 4, 1]
[1, 2, 3]
dreamingdan 2009-08-07
  • 打赏
  • 举报
回复
bigbug9002谢谢你的热心帮忙啊,那么我上面的实现方法有问题吗?
弘石 2009-08-07
  • 打赏
  • 举报
回复
不如先去掉相同的值,然后再取值
gukuitian 2009-08-07
  • 打赏
  • 举报
回复
尽量三组不同的值
有点模糊啊,到底能不能相同呢
bigbug9002 2009-08-07
  • 打赏
  • 举报
回复
可以相同啊????
bigbug9002 2009-08-07
  • 打赏
  • 举报
回复
import java.util.*;

public class Test4{
public static void main(String[] args){
Vector<String> myVector=new Vector<String>(Arrays.asList("1","1","2","3","2","4","3"));
String[] result=getElementFromVector(myVector,3);
System.out.println(Arrays.toString(result));

}
public static String[] getElementFromVector(Vector<String> vector,int count){
Set<String> mySet=new HashSet<String>(vector);
if(mySet.size()<count){
System.out.println("不相同的元素数量不够");
}
String[] result=new String[count];
int index=count-1;
for(String str:mySet){
if(index<0){
break;
}
result[index--]=str;
}
return result;
}

}
dreamingdan 2009-08-07
  • 打赏
  • 举报
回复
我修改了下,请帮我看看是否正确
public static String[] getElementFromVector(Vector vector) {
String strData[] = new String[3];
String a="";
int s=0;
Enumeration e = vector.elements();
while (e.hasMoreElements()) {
String vv = (String)e.nextElement();
if(a.indexOf(vv+",")<0){
a+=vv+",";
strData[s]=vv;
s++;
}
}
for (int i = 0; i < strData.length; i++) {
String s1 = strData[i];
if(s1==null)
{
strData[i]=strData[0];
}
}

return strData;
}
dreamingdan 2009-08-07
  • 打赏
  • 举报
回复
三个
比如里面的值是1,1,1,1,2,1,3,4,1那就从1234中取三个就行
1,1,1,1,1,1,3,4,1那就从134中取三个
1,1,1,1,1,1,1,4,1那就从114取三个
1,1,1,1,1,1,1,1,1那就从111中取三个
请朋友们写出实现代码,谢谢
bigbug9002 2009-08-07
  • 打赏
  • 举报
回复
三个还是三组?
zhouzongjiu 2009-08-07
  • 打赏
  • 举报
回复

public static List getElementFromVector(Vector vector) {
List strData = new ArrayList();

if (vector != null && vector.size() >=3) {
strData.add(vector.get(0));
for (int i = 1; i < vector.size(); i++) {
if (!strData.contains(vector.get(i))) {
strData.add(vector.get(i));
}
if (strData.size() >= 3) {
break;
}
}

if (strData.size() == 1) {
strData.add(strData.get(0));
strData.add(strData.get(0));
}
if (strData.size() == 2) {
if (strData.get(1).equals(vector.get(1))) {
strData.add(vector.get(2));
} else {
strData.add(1,vector.get(1));
}
}
}
return strData;
}
sunnyfun888 2009-08-07
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 sunnyfun888 的回复:]
                if(count <= 0){
                    break;
                }
是多余的,可以去掉
[/Quote]

当不一样的字符串个数超过3个是还是需要的。
bigbug9002 2009-08-07
  • 打赏
  • 举报
回复
我可能考虑的太多了,我考虑了值相同但引用不同的字符串,尽量让结果中相同的字符串的引用不相同.

实际上字符串可以看成是常量,所以我的考虑是杞人忧天了。
sunnyfun888 2009-08-07
  • 打赏
  • 举报
回复
if(count <= 0){
break;
}
是多余的,可以去掉

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧