/** * Constructs a new, empty set; the backing <tt>HashMap</tt> instance has * default initial capacity (16) and load factor (0.75). */ publicHashSet(){ map = new HashMap<>(); }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
/** * Adds the specified element to this set if it is not already present. * More formally, adds the specified element <tt>e</tt> to this set if * this set contains no element <tt>e2</tt> such that * <tt>(e==null ? e2==null : e.equals(e2))</tt>. * If this set already contains the element, the call leaves the set * unchanged and returns <tt>false</tt>. * * @param e element to be added to this set * @return <tt>true</tt> if this set did not already contain the specified * element */ publicbooleanadd(E e){ return map.put(e, PRESENT)==null; }
1 2 3 4 5 6 7
Set<String> set= new CopyOnWriteArraySet<>(); for(int i=0;i<100;i++){ new Thread(()->{ set.add(UUID.randomUUID().toString().substring(0,8)); System.out.println(set); },String.valueOf(i)).start(); }
HashMap
1 2 3 4 5 6 7
Map<String,String> map= new ConcurrentHashMap<>(); for(int i=0;i<100;i++){ new Thread(()->{ map.put(Thread.currentThread().getName(),UUID.randomUUID().toString().substring(0,8)); System.out.println(map); },String.valueOf(i)).start(); }