泛型合并去重(int的话排序)

一次看到的面试题,感觉挺有意思的,就做了一下,还收集了一下其他人的做法

package com.fanyafeng.singleton;

import com.fanyafeng.singleton.demo.OneSingleton;

import java.lang.reflect.Array;
import java.util.*;
import java.util.stream.Stream;

/**
 * Created by fanyafeng on 16/6/30.
 * <p>
 * 只列举了线程安全的单例模式
 */
public class main {
    public static void main(String[] args) {
//        OneSingleton oneSingleton=OneSingleton.getInstance();
//        oneSingleton.showMessage();

        String[] s1 = new String[]{"s1", "s2", "s3"};
        String[] s2 = new String[]{"s3", "s5", "s4"};
        Integer[] i1 = new Integer[]{1, 2, 3};
        Integer[] i2 = new Integer[]{5, 4, 3};
        String[] smx = mix(s1, s2);
        Integer[] is = mix(i1, i2);
        for (String str : smx) {
            System.out.println(str);
        }
        for (Integer i : is) {
            System.out.println(i);
        }
    }

    /**
     * 合并+去重
     *
     * @param ts1
     * @param ts2
     * @return
     */
    public static <T> T[] mix(T[] ts1, T[] ts2) {
        // 可改动区域开始
        Set<T> tSet = new TreeSet<>();
        for (T t : ts1) {
            tSet.add(t);
        }
        for (T t : ts2) {
            tSet.add(t);
        }
        List<T> tList = new ArrayList<>(tSet);
        int setLength = tSet.size();
        T[] both = (T[]) Array.newInstance(ts1.getClass().getComponentType(), setLength);

        for (int i = 0; i < setLength; i++) {
            both[i] = tList.get(i);
        }

//        Set<T> a1=new TreeSet<>();
//        a1.addAll(Arrays.asList(ts1));
//        a1.addAll(Arrays.asList(ts2));
//        return (T[])Arrays.copyOfRange(a1.toArray(),0,a1.size(),ts1.getClass());

//        ArrayList<T> a1=new ArrayList<>();
//        a1.addAll(Arrays.asList(ts1));
//        a1.addAll(Arrays.asList(ts2));
//        List<T> ll=new LinkedList<>();
//        for (T t:a1){
//            if (!ll.contains(t)){
//                ll.add(t);
//            }
//        }
//        return (T[])Arrays.copyOfRange(ll.toArray(),0,ll.size(),ts1.getClass());

        return both;
        // 可改动区域结束
    }
//    T[] both = (T[]) Array.newInstance(ts1.getClass().getComponentType(), ts1.length + ts2.length);
//        Object[] bothObj = Stream.concat(Arrays.stream(ts1), Arrays.stream(ts2)).toArray();
//        for (int i = 0; i < both.length; i++) {
//            both[i] = (T) bothObj[i];
//        }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值