java数组匹配求算法

zmbc48 2014-05-24 01:56:58
两个list
list1的数据是键值对:
1:11
2:null
3:13
4:null
5:15
6:16
7:17
8:null
9:null
10:100
........
list2的数据是:
1:11
2:13
4:14
5:15
12:120
3:16
6:17
7:16
........
两组数据比对,
两个值都一样的个数
键一样,值不一样的个数
键不一样,值一样的个数
list1中键存在list2中键不存在的个数
list2中键存在list1中键不存在的个数
求java实现的算法或思路。
...全文
414 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
冰思雨 2014-05-27
  • 打赏
  • 举报
回复
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;

public class Random {

	public static void main(final String[] args) {
        List<Integer> list1 = new ArrayList<Integer>() {
            {
                add(null);
                add(11);
                add(null);
                add(13);
                add(null);
                add(15);
                add(16);
                add(17);
                add(null);
                add(null);
                add(100);
            }
        };
        List<Integer> list2 = new ArrayList<Integer>() {
            {
                add(null);
                add(11);
                add(13);
                add(16);
                add(14);
                add(15);
                add(17);
                add(16);
                add(null);
                add(null);
                add(null);
                add(null);
                add(120);
            }
        };
        printList("list1", list1);
        printList("list2", list2);
        HashSet<Integer> cache = new HashSet<Integer>(list1);
        int maxSize = list1.size()>list2.size()?list1.size():list2.size();
        Integer int1,int2;
        int ans1=0,ans2=0,ans3=0;
        for(int index = 0;index<maxSize;index++){
        	if(list2.size()>index){
        		int2 = list2.get(index);
        		if(int2!=null && cache.contains(int2)){
        			ans3++;
        		}
        	}else{
        		continue;
        	}
        	if(list1.size()>index){
        		int1 = list1.get(index);
        	}else{
        		continue;
        	}
        	if((int1!=null && int1.equals(int2))||(int2!=null && int2.equals(int1))){
        		ans1++;
        	}else {
        		ans2++;
        	}
        }
        cache.clear();
        System.out.println("两个值都一样的个数:"+ans1);
        System.out.println("键一样,值不一样的个数:"+ans2);
        System.out.println("键不一样,值一样的个数:"+ans3);//list2里面的两个16存在重复
    }
 
    public static void printList(String listName, List<Integer> list) {
        if (listName == null || list == null) {
            return;
        }
        System.out.println(listName + "的数据:");
        for (int listIndex = 1; listIndex < list.size(); listIndex++) {
            Integer listElement = list.get(listIndex);
            if (listElement != null) {
                System.out.println(" " + listIndex + ":" + listElement);
            } else {
                System.out.println(" " + listIndex + ":" + "null");
            }
        }
    }
}
lliiqiang 2014-05-27
  • 打赏
  • 举报
回复
2个key的list比较就可以了
zmbc48 2014-05-26
  • 打赏
  • 举报
回复
我的意思是list的里面是map键值对,他的键不一定是顺序的,只是一个数字,数据结构是这样的 import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class MapTest { public static void main(String[] args) { List<Map<String, String>> list1 = new ArrayList<Map<String,String>>(); Map< String, String> map = new HashMap<String, String>(); map.put("1","11"); map.put("2", "null"); map.put("3", "13"); map.put("4", null); map.put("5", "15"); map.put("6", "16"); map.put("7","17"); map.put("8", null); map.put("9", null); map.put("10", "100"); list1.add(map); List<Map<String, String>> list2 = new ArrayList<Map<String,String>>(); Map< String, String> map2 = new HashMap<String, String>(); map2.put("1","11"); map2.put("2", "13"); map2.put("4", "14"); map2.put("5", "15"); map2.put("12","120"); map2.put("3", "16"); map2.put("6","17"); map2.put("7", "16"); list2.add(map2); } } map中的键不是按顺序的。
RICHEER COCA 2014-05-25
  • 打赏
  • 举报
回复
路过,学习中
日知己所无 2014-05-24
  • 打赏
  • 举报
回复

import java.util.*;

public class ListIteratorTest {

    public static void main(final String[] args) {
        List list1 = new ArrayList() {
            {
                add(null);
                add(11);
                add(null);
                add(13);
                add(null);
                add(15);
                add(16);
                add(17);
                add(null);
                add(null);
                add(100);
            }
        };
        List<Integer> list2 = new ArrayList<Integer>() {
            {
                add(null);
                add(11);
                add(13);
                add(16);
                add(14);
                add(15);
                add(17);
                add(16);
                add(null);
                add(null);
                add(null);
                add(null);
                add(120);
            }
        };
        printList("list1", list1);
        printList("list2", list2);
    }

    public static void printList(String listName, List<Integer> list) {
        if (listName == null || list == null) {
            return;
        }
        System.out.println(listName + "的数据:");
        for (int listIndex = 1; listIndex < list.size(); listIndex++) {
            Integer listElement = list.get(listIndex);
            if (listElement != null) {
                System.out.println(" " + listIndex + ":" + listElement);
            } else {
                System.out.println(" " + listIndex + ":" + "null");
            }
        }
    }
}
遍历list并输出其中的数据键值对的方法为printList 稍加修改就能输出所有想要的数据了 如果是Map,可以参考下帖: http://bbs.csdn.net/topics/390796054
日知己所无 2014-05-24
  • 打赏
  • 举报
回复
List可以视为Key为数值的Map
why_rookie 2014-05-24
  • 打赏
  • 举报
回复
不用map?
jsshizhanab 2014-05-24
  • 打赏
  • 举报
回复
list里面放的对象 ,对象有 两个属性,键值?
LinY_X 2014-05-24
  • 打赏
  • 举报
回复
干嘛要2个list啊 2个map不行么

62,615

社区成员

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

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