JAVA的Collections类

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/singgel/article/details/84067584

1.shuffle的用法

就是随机打乱原来的顺序,和洗牌一样。有人戏称转为打麻将设计的,如:

// ShuffleTest.java  
  
import java.util.*;  
  
public class ShuffleTest {  
    public static void main(String[] args) {  
        List<Integer> list = new ArrayList<Integer>();  
        for (int i = 0; i < 10; i++)  
            list.add(new Integer(i));  
        System.out.println("打乱前:");  
        System.out.println(list);  
  
        for (int i = 0; i < 5; i++) {  
            System.out.println("第" + i + "次打乱:");  
            Collections.shuffle(list);  
            System.out.println(list);  
        }  
    }  
} 

2.Queue中 add/offer,element/peek,remove/poll区别

1、add()和offer()区别:

add()和offer()都是向队列中添加一个元素。一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,调用 add() 方法就会抛出一个 unchecked 异常,而调用 offer() 方法会返回 false。因此就可以在程序中进行有效的判断!

 2、poll()和remove()区别:

remove() 和 poll() 方法都是从队列中删除第一个元素。如果队列元素为空,调用remove() 的行为与 Collection 接口的版本相似会抛出异常,但是新的 poll() 方法在用空集合调用时只是返回 null。因此新的方法更适合容易出现异常条件的情况。

3、element() 和 peek() 区别:

element() 和 peek() 用于在队列的头部查询元素。与 remove() 方法类似,在队列为空时, element() 抛出一个异常,而 peek() 返回 null。

正儿八经的用法,我来设计一个权重:

/**
     * 选取一个合适的address,可以随机获取等,内部可以使用合适的算法.
     *
     * @return
     */
    InetSocketAddress selector();

---------------
  // 用来保存当前provider所接触过的地址记录,当zookeeper集群故障时,可以使用trace中地址,作为"备份"
    private Set<String> trace = new HashSet<String>();
    private final List<InetSocketAddress> container = new ArrayList<InetSocketAddress>();
    private Queue<InetSocketAddress> inner = new LinkedList<InetSocketAddress>();

    @Override
    public InetSocketAddress selector() {
        if (inner.isEmpty()) {
            if (!container.isEmpty()) {
                inner.addAll(container);
            } else if (!trace.isEmpty()) {
                synchronized (lock) {
                    for (String hostname : trace) {
                        container.addAll(transfer(hostname));
                    }
                    Collections.shuffle(container);
                    inner.addAll(container);
                }
            }
        }
        return inner.poll();
    }

-----

更多关于Java的代码讲解:https://github.com/singgel/Java-algorithms/tree/master/src/test/java/com/hks/eightsortingalgorithms

猜你喜欢

转载自blog.csdn.net/singgel/article/details/84067584