java-求:Java实现下面的算法,要求尽量高的性能

问题描述

求:Java实现下面的算法,要求尽量高的性能
算法要求:把下面两个list:

columnNames list: [""Comment""Comment""Cost""Term""Cost""]

columnValues list: [""my comment 1""my comment 2""my cost 1""my term""my cost 2""]

变成:

columnNames list: [""Comment""Cost""Term""]

columnValues list: [[""my comment 1""my comment 2""] [""my cost 1""my cost 2""]my test""]

其中columnNames list中的元素Comment和Comment是重复的,要求新的List里面不能重复。

谢谢!

解决方案

用hashtable,Names直接把字符串作为key,值无所谓。
Values,将字符串去掉数字作为Key,value是ArrayList,并且把自身添加进去。

解决方案二:
看我下面代码 狗服务到位不 .
List columnNames = Arrays.asList(new String[] {""Comment""Comment""Cost""Term""Cost""}) ;
List columnValues = Arrays.asList(new String[]{""my comment 1""my comment 2""my cost 1""my term""my cost 2""}) ;

    Map<String List<String>> map = new HashMap<String List<String>>() ;    for (int x = 0; x < columnNames.size(); x++) {        List<String> valueList = map.get(columnNames.get(x));        if (valueList == null) {            valueList = new ArrayList<String>();            map.put(columnNames.get(x) valueList);        }        valueList.add(columnValues.get(x));        map.put(columnNames.get(x) valueList);    }    List<String> newColumnNames = new ArrayList<String>() ;    List<String> newColumnValues = new ArrayList<String>() ;    for(Entry<String List<String>> list:map.entrySet()) {        newColumnNames.add(list.getKey()) ;        newColumnValues.add(Arrays.toString(list.getValue().toArray())) ;    }    System.out.println(JSON.toJSONStringWithDateFormat(mapyyyy-MM-dd hh:mm:ss""));    System.out.println(JSON.toJSONStringWithDateFormat(newColumnNamesyyyy-MM-dd hh:mm:ss""));    System.out.println(JSON.toJSONStringWithDateFormat(newColumnValuesyyyy-MM-dd hh:mm:ss""));

解决方案三:
这个应该是字符串归类吧,相同字符串舍去?可以描述一下要求是什么么?

解决方案四:
我想要的结果是:
key: ""Comment"" value: [""my comment 1""my comment 2""]
key: ""Cost"", value: [""my cost 1""my cost 2""]
key: ""Term"" value: ""my test""

但用算法怎样实现呢?楼上的说了等于没说啊

解决方案五:
自己搞定:
List columnNames = new ArrayList();
columnNames.add(""Comment"");
columnNames.add(""Comment"");
columnNames.add(""Cost"");
columnNames.add(""Test"");
columnNames.add(""Cost"");
List columnValues = new ArrayList();
columnValues.add(""my comment 1"");
columnValues.add(""my comment 2"");
columnValues.add(""my cost 1"");
columnValues.add(""my test"");
columnValues.add(""my cost 2"");

    Map map = new HashMap();    for (int i = 0; i < columnNames.size(); i++) {        boolean duplicatedColumn = false;        String columnName = columnNames.get(i);        if (map.keySet().contains(columnName)) {            continue;        }        List list = new ArrayList();        list.add(columnValues.get(i));        for (int j = columnNames.size() - 1; j > i; j--) {            if (columnNames.get(j).equals(columnNames.get(i))) {                list.add(columnValues.get(j));                map.put(columnName list);                duplicatedColumn = true;            }        }        if (!duplicatedColumn) {            map.put(columnName columnValues.get(i));        }    }    System.out.print(map);

解决方案六:
楼上写的太啰嗦了 还嵌套循环....

Map> map = new HashMap>() ; // 定义map
for (int x = 0; x < columnNames.size(); x++) {
List valueList = map.get(columnNames.get(x)) ;
if(valueList == null) {
valueList = new ArrayList () ;
}
valueList.add(columnValues.get(x)) ;
map.put(columnNames.get(x) valueList) ;
}

解决方案七:
Map> map,定义这样的map 进行操作

解决方案八:
定义如下map

Map<StringSet<String>> map 

解决方案九:
首先这2个数组的长度是一样的,那么可以使用google guava 中的 ArrayListMultimap 类实现你的需求。至于速度么,你可以测试下!

com.google.guava
guava
18.0

import com.google.common.collect.ArrayListMultimap;import com.google.common.collect.Lists;import java.util.*;public static void main(String[] args) {        List<String> keys = Lists.newArrayList(""Comment""Comment""Cost""Term""Cost"");        List<String> values = Lists.newArrayList(""my comment 1""my comment 2""my cost 1""my term""my cost 2"");        ArrayListMultimap<String String> key4MultiValues = ArrayListMultimap.create();        if (keys.size() == values.size()) {            for (int i = 0; i < keys.size(); i++) {                key4MultiValues.put(keys.get(i) values.get(i));            }        }        Map<String Collection<String>> asMap = key4MultiValues.asMap();        System.out.println(asMap);    }

输出

{Cost=[my cost 1 my cost 2] Comment=[my comment 1 my comment 2] Term=[my term]}

解决方案十:
public static void main(String[] args) {
List keys = Arrays.asList(""Comment""Comment""Cost""Term""Cost"");
List values = Arrays.asList(""my comment 1""my comment 2""my cost 1""my term""my cost 2"");

     HashMap<String List<String>> map = new HashMap<String List<String>>();     for (int i =0;i<keys.size();i++) {         final String key = keys.get(i);          List<String> value = map.get(key);         if(value==null){             value = new ArrayList<String>();             map.put(key value);         }         value.add(values.get(i));    }     System.out.println(map.toString());}
时间: 2024-11-10 08:03:07

java-求:Java实现下面的算法,要求尽量高的性能的相关文章

java求一个如何切分多个时间段算法

问题描述 java求一个如何切分多个时间段算法 例如现在有时间 5.13-10.1 5.3-6.1 6.1-6.2 怎么能变成 5.3-5.13 5.13-6.1 6.1-6.2 解决方案 先按照 杠 把所有日期拆分出来,然后按照你的规则排序,然后从第二个开始,到倒数第二个,每个和它前面及后面的组成一组

求java中常用的加密、解密算法?

问题描述 求java中常用的加密.解密算法? 页面提交的密码.电话等信息通常需要加密后存放到数据库里,在个人信息展示时通常需要进行解密,如何实现?求案例或者思路. 解决方案 常用加密解密算法java常用的加密,解密,数字签名等APIJava Cipher类 DES算法(加密与解密) 解决方案二: 这个其实在百度里搜一下,到处都有答案,现提供一个参考文章:http://www.blogjava.net/amigoxie/archive/2014/07/06/415503.html 解决方案三: h

安卓后端-求Java高效合理排序算法

问题描述 求Java高效合理排序算法 安卓界面列表可任意拖拽变换列表数据顺序,保存数据在后端服务,怎样在后端实现排序,求各路高手指点,确切的方案也可以,大概思路方向也可以,希望大家不吝赐教,先谢过 解决方案 这个在排序的时候加上一个orderid,当你页面上改变位置的时候,就更新orderid发回去. 这个链接的前端可以借鉴http://www.cnblogs.com/breakdown/archive/2012/03/29/2423091.html

递归-(已解决)自己用java写的八皇后问题算法,可是不行,求告知原因

问题描述 (已解决)自己用java写的八皇后问题算法,可是不行,求告知原因 public class Test { public static void main(String[] args) { Empress a=new Empress(); a.find(0,0); System.out.println(a.map); } } class Empress{ public int[][] arry=new int[8][8]; public int map=0; public boolean

求Java List 递归 算法

问题描述 求Java List 递归 算法:通过方法取得的List(myList)结构如下:id name parentId1 AA null2 BB 13 CC 14 DD 25 EE 26 FF 4想要一个递归方法,以myList为参数,最后返回一个List,能够遍历出如下树的结构:AA--BB----DD------FF----EE--CCFormBean:String id;String name;String parentId; 问题补充:实际上,我要的树的结构是要在部门名的下拉列表中

java算法-求大神 大哥优化java 求N的阶乘

问题描述 求大神 大哥优化java 求N的阶乘 ackage cn.zmx; public class Multiply { /** * 这个默认构造方法不能省略,因为有了带参数的构造方法后,类在实例化过程中就 * 不会再创建默认的缺省构造方法. * 类没有提供任何构造函数,将自动生成一个默认构建函数. * 但如果有构造函数,则不会自动生成该默认构造函数. */ public Multiply(){ } public Multiply(int x) { this.setX(x); } priva

java求双色球模拟要有JFrame窗口的代码加设计思路

问题描述 java求双色球模拟要有JFrame窗口的代码加设计思路 求双色球模拟要有JFrame窗口的代码加设计思路.求算法简单点的,万分感谢 解决方案 红球1-33,随机选6个,蓝球1-16随机选一个,就是一个随机数吧,有什么具体的要求么.

java求1至19这些自然数数中,所有相加为20的组合

使用Stack来完成: 代码如下: package ca.map; import java.util.Stack; public class Sum1_19eq20 { //算法: 求1至19这些自然数数中,所有相加为20的组合 public static void main(String[] args) { combinateDataOfRange(1, 19, 20); } public static void combinateDataOfRange(int min,int max,int

java 编程-JAVA实现距离矢量算法

问题描述 JAVA实现距离矢量算法 1.编程实现右图所示简单网络拓扑的距离向量路由算法. 1.1 结点之间的连接关系固定: 1.2 链路开销可以由用户设定. 2.距离向量算法的实现方式: 2.1 可以利用多线程机制:每个结点一个 线程:每隔一段事件利用线程间通信 机制传递距离向量(DV):或是 2.2 每个结点利用单独的进程实现:每隔一 段时间利用Socket实现结点间的距离向量交换: 2.3 距离向量的计算与结点路由表的显示. 3.网络拓扑结构的描述(数据结构),拓扑结构利用文件存储. 4.结