Java集合常用方法

List

ArrayList

Spliterator是在java 8引入的一个接口,它通常和stream一起使用,用来遍历和分割序列。

	public static void test() {

		
		/**
		 * 创建100个对象
		 */
		List<User> users = Stream.generate(() -> new User("1")).limit(100).collect(Collectors.toList());
		Spliterator<User> spliterator1 = users.spliterator();
		/**
		 * trySplit尝试对现有的stream进行分拆,一般用在parallelStream的情况,因为在并发stream下,
		 * 我们需要用多线程去处理stream的不同元素,trySplit就是对stream中元素进行分拆处理的方法。
		 */
		Spliterator<User> spliterator2 = spliterator1.trySplit();

		/**
		 * 表示待处理的元素
		 */
		System.err.println(spliterator1.estimateSize());
		
		/*
		  	表示Spliterator的特征: 共有八种特征
		 	public static final int ORDERED    = 0x00000010;//表示元素是有序的(每一次遍历结果相同)
			public static final int DISTINCT   = 0x00000001;//表示元素不重复
			public static final int SORTED     = 0x00000004;//表示元素是按一定规律进行排列(有指定比较器)
			public static final int SIZED      = 0x00000040;//
			表示大小是固定的
			public static final int NONNULL    = 0x00000100;//表示没有null元素
			public static final int IMMUTABLE  = 0x00000400;//表示元素不可变
			public static final int CONCURRENT = 0x00001000;//表示迭代器可以多线程操作
			public static final int SUBSIZED   = 0x00004000;//表示子Spliterators都具有SIZED特性
		 
		 */
		System.err.println(spliterator1.characteristics());
		/**
		 * 如果元素存在,则对他进行处理并返回true,负责返回false,类似集合的迭代器
		 */
		spliterator1.tryAdvance(System.err::println);
		/**
		 *  遍历
		 */
		spliterator1.forEachRemaining(System.err::println);
		
	}

	public static void listTest() {

		List<User> users = Stream.generate(() -> new User(new Integer((int) (Math.random() * 20)))).limit(20).collect(Collectors.toList());

		/**
		 * Comparator 外部比较器 Comparable 内部比较器
		 */
		users.sort(new Comparator<User>() {
			@Override
			public int compare(User u1, User u2) {
				if (u1.getId() < u2.getId()) {
					return 1;
				} else if (u1.getId() > u2.getId()) {
					return -1;
				}
				return 0;
			}

		});

		List<User> retainList = Stream.generate(() -> new User(new Integer((int) (Math.random() * 20)))).limit(3).collect(Collectors.toList());
		/**
		 * 只保留retainList集合中有的元素
		 */
		users.retainAll(retainList);
		/**
		 * 替换满足条件的元素
		 */
		users.replaceAll(a -> {
//			if (a.getUsername() == null) {
//				System.err.println("null");
//				a.setUsername("username");
//			}
			String uername = Optional.ofNullable(a.getUsername()).orElseGet(() -> new String("username"));
			a.setUsername(uername);
			return a;
		});
    }

LinkedList

        LinkedList<User> linkedList = new LinkedList<>();
		linkedList.add(new User(2));
		linkedList.add(new User(3));
		/**
		 * 最前面插入元素
		 */
		linkedList.addFirst(new User(1, "addFirst"));
		/**
		 * 倒序迭代器
		 */
		Iterator<User> descIterator = linkedList.descendingIterator();
		while (descIterator.hasNext()) {
			User user = (User) descIterator.next();
			System.err.println(user);
		}
		/**
		 * 检索但不删除此列表的头(第一个元素)
		 */
		User elementUser = linkedList.element();
		/**
		 * 添加指定元素作为此列表的尾部(最后一个元素)
		 */
		linkedList.offer(new User(4, "offer"));
		/**
		 * 删除此中指定元素的最后一个匹配项 列表(从头到尾遍历列表时)。如果列表不包含元素,它保持不变。
		 */
		linkedList.removeLastOccurrence(new User(4, "offer"));
		/**
		 * 检索并删除此列表的头(第一个元素)。
		 */
		linkedList.remove();
		/**
		 * 检索并删除此列表的头(第一个元素)。
		 */
		linkedList.poll();
		/**
		 * 检索并删除该列表的最后一个元素
		 */
		linkedList.pollLast();
		/**
		 * 检索但不删除此列表的头(第一个元素)。
		 */
		linkedList.peek();

交集、差集、并集

   public static void collectors() {

		List<String> list1 = Arrays.asList("a", "b", "c", "d");
		List<String> list2 = Arrays.asList("a", "b", "f");

		List<String> list3 = new ArrayList<>(list1);
		List<String> list4 = new ArrayList<>(list2);

		/**
		 * 差集
		 */
		List<String> difference = list4.stream().filter(s -> !list3.contains(s)).collect(Collectors.toList());
		difference.addAll(list3.stream().filter(s -> {
			return !list4.contains(s);
		}).collect(Collectors.toList()));

		/**
		 * 交集
		 */
		// list3.retainAll(list4);
		/**
		 * 并集
		 */
		list3.addAll(list4);
		List<String> union = list3.stream().distinct().collect(Collectors.toList());
		union.forEach(System.err::println);
		
		
		
	}
	

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值