62,614
社区成员
发帖
与我相关
我的任务
分享
int[][] a={{2,3},{11,2},{7,4},{9,3}};
int[][] b={{3,4},{9,1},{2,2},{6,3},{11,1}};
int[][] c={{2,5},{3,4},{6,3},{7,4},{9,4},{11,3}};
public V get(Object key) {
if (key == null)
return getForNullKey();
int hash = hash(key.hashCode());
for (Entry<K,V> e = table[indexFor(hash, table.length)];
e != null;
e = e.next) {
Object k;
if (e.hash == hash && ((k = e.key) == key || key.equals(k)))
return e.value;
}
return null;
}
int[][] x = { { 2, 3 }, { 11, 2 }, { 7, 4 }, { 9, 3 } };
int[][] y = { { 3, 4 }, { 9, 1 }, { 2, 2 }, { 6, 3 }, { 11, 1 } };
int[][] a;
int[][] b;
Map<Integer, Integer> c = new HashMap<Integer, Integer>();
if (x.length > y.length) {
a = x;
b = y;
} else {
a = y;
b = x;
}
for (int i = 0; i < b.length; i++) {
if (!c.containsKey(a[i][0])) {
c.put(a[i][0], a[i][1]);
} else {
int m = c.get(a[i][0]) + a[i][1];
c.remove(a[i][0]);
c.put(a[i][0], m);
}
if (!c.containsKey(b[i][0])) {
c.put(b[i][0], b[i][1]);
} else {
int n = c.get(b[i][0]) + b[i][1];
c.remove(b[i][0]);
c.put(b[i][0], n);
}
}
for (int i = b.length; i < a.length; i++) {
if (!c.containsKey(a[i][0])) {
c.put(a[i][0], a[i][1]);
} else {
int m = c.get(a[i][0]) + a[i][1];
c.remove(a[i][0]);
c.put(a[i][0], m);
}
}
int[][] result = new int[c.size()][2];
int i = 0;
for (int key : c.keySet()) {
result[i][0] = key;
result[i][1] = c.get(key);
i++;
}
class Sort implements Comparator<int[]>{
@Override
public int compare(int[] o1, int[] o2) {
return o1[0]-o2[0];
}
}
public static int[][] add(int[][] target,int[][] first) {
int len1=target.length;
int len2=first.length;
Set<Integer> key=new HashSet<Integer>();
Arrays.sort(target,MySort());
Arrays.sort(first,MySort());
for(int i=0;i<len1;i++){
key.add(target[i][0]);
}
for(int i=0;i<len2;i++){
key.add(first[i][0]);
}
int[][] temp=new int[key.size()][];
Iterator<Integer> i=key.iterator();
int k=0;
int a=0;
int b=0;
int index=0;
while(i.hasNext()&&index<key.size()){
k=i.next();
if(a<len1&&k==target[a][0]&&k!=first[b][0]){
temp[index]=new int[]{target[a][0],target[a][1]};
a++;
}
if(b<len2&&k==first[b][0]&&k!=target[a][0]){
temp[index]=new int[]{first[b][0],first[b][1]};
b++;
}
else if((a<len1&&b<len2)&&k==target[a][0]){
temp[index]=new int[]{first[b][0],first[b][1]+target[a][1]};
a++;
b++;
}
index++;
}
return temp;
}
public static void main(String[] args) {
int[][] a = { { -2, 3 }, { 11, 2 }, { 7, 4 }, { 9, 3 } };
int[][] b = { { 3, 4 }, { 9, 1 }, { -2, 2 }, { 6, 3 }, { 11, 1 } };
// 得到最大最小值
int max = a[0][0], min = a[0][0];
for (int[] x : a) {
if (x[0] > max) {
max = x[0];
}
if (x[0] < min) {
min = x[0];
}
}
for (int[] x : b) {
if (x[0] > max) {
max = x[0];
}
if (x[0] < min) {
min = x[0];
}
}
// 初始化,设置默认值
int[] c = new int[max - min + 1];
for (int i = 0; i < c.length; i++) {
c[i] = min - 1;
}
// 赋值
for (int[] x : a) {
c[x[0] - min] = x[1];
}
for (int[] x : b) {
// 如果这个位置没有值
if (x[0] < min) {
c[x[0] - min] = x[1];
} else {
// 否则值相加
c[x[0] - min] += x[1];
}
}
//计算key的个数
int maxcount = 0;
for (int i = 0; i < c.length; i++) {
if (c[i] >= min) {
maxcount++;
}
}
//得到结果
int[][] result = new int[maxcount][2];
int count = 0;
for (int i = 0; i < c.length; i++) {
if (c[i] >= min) {
result[count][0] = i + min;
result[count++][1] = c[i];
}
}
print(result);
}
static void print(int[][] d) {
System.out.print("{");
for (int[] x : d) {
System.out.print("{");
System.out.print(x[0]);
System.out.print(",");
System.out.print(x[1]);
System.out.print("}");
}
System.out.print("}");
}