ASList

Java List Initialization in One Line

不羁岁月 提交于 2020-02-26 08:01:15
1. Introduction In this quick tutorial, we'll investigate how can we initialize a List using one-liners. 2. Create From an Array We can create a List from an array and thanks to array literals we can initialize them in one line: List<String> list = Arrays.asList( new String[]{ "foo" , "bar" }); We can trust the varargs mechanism to handle the array creation. By that, we can write more concise and readable code: @Test public void givenArraysAsList_thenInitialiseList() { List<String> list = Arrays.asList( "foo" , "bar" ); assertTrue(list.contains( "foo" )); } The result instance of this code

尝试从列表中删除元素时,为什么会出现UnsupportedOperationException?

故事扮演 提交于 2020-02-26 05:38:04
我有以下代码: public static String SelectRandomFromTemplate(String template,int count) { String[] split = template.split("|"); List<String> list=Arrays.asList(split); Random r = new Random(); while( list.size() > count ) { list.remove(r.nextInt(list.size())); } return StringUtils.join(list, ", "); } 我得到这个: 06-03 15:05:29.614: ERROR/AndroidRuntime(7737): java.lang.UnsupportedOperationException 06-03 15:05:29.614: ERROR/AndroidRuntime(7737): at java.util.AbstractList.remove(AbstractList.java:645) 这怎么会是正确的方法? Java 15 #1楼 您不能删除,也不能添加到固定大小的数组列表中。 但是您可以从该列表创建子列表。 list = list.subList(0, list.size() - (list

1、ApplicationContextInitializer初始化器解析

喜你入骨 提交于 2020-02-26 04:58:10
1.1、初始化器三种添加到容器中方式 1) 方式1:在resources目录下新建META-INF目录,新建spring.factories文件并赋值 org.springframework.context.ApplicationContextInitializer=com.lwh.springboot.initializer.FirstInitializer @Order(1) public class FirstInitializer implements ApplicationContextInitializer<configurableapplicationcontext> { @Override public void initialize(ConfigurableApplicationContext ctx) { ConfigurableEnvironment environment = ctx.getEnvironment(); Map<string, object> map = new HashMap<>(); map.put("key1", "value1"); MapPropertySource mapPropertySource = new MapPropertySource("firstInitializer", map); environment

每天AC系列(八):括号生成

一笑奈何 提交于 2020-02-26 04:51:25
1 题目 LeetCode第22题 ,根据一个整数生成所有的有效的括号组合,这个整数表示括号的对数. 2 暴力法 对于n对括号,总共2n个字符,每个字符可以为左括号或右括号,所以总共2^(2n)中组合,暴力法就是枚举各个组合,然后判断它们是否为有效的组合: public void f(char c[],int pos,List<String> result) { if(pos == c.length) { if(valid(c)) result.add(Arrays.toString(c).replaceAll("(\\[)|(\\])| |,","")); } else { c[pos] = '('; f(c,pos+1,result); c[pos] = ')'; f(c,pos+1,result); } } public boolean valid(char [] f) { int len = 0; for(char c:f) { if(c == '(' ) { if(++len > f.length/2) return false; } else if(len-- <=0) return false; } return len == 0; } 首先加上左括号,进入下一轮递归,同时把加括号的位置加1,然后到达2n长度后,判断是否有效,有效的话加入结果数组,然后回到上一层的递归

每天AC系列(一):三数之和

我与影子孤独终老i 提交于 2020-02-25 21:28:57
1 题目 LeetCode第15题 ,难度中等,题目描述: 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。 注意:答案中不可以包含重复的三元组。 2 解法 什么也不管先来个O(n3): for(int i=0;i<nums.length;++i) { for(int j=i+1;j<nums.length;++j) { for(int k=j+1;k<nums.length;++k) { if(nums[i]+nums[j]+nums[k] == 0) { ArrayList<Integer> arrayList = new ArrayList<>(); arrayList.add(nums[i]); arrayList.add(nums[j]); arrayList.add(nums[k]); result.add(arrayList); } } } } well. 3 优化 上面暴力算法的思想就是单纯三个循环,优化的方法可以考虑降低一个循环,使用"双指针"的思想,首先对数组进行排序,然后一开始固定一个数,然后让两个指针一个指向这个数的右区间的起点,一个指向终点,不断计算这三个值的和,根据得出的和移动左指针或者右指针,一共三种情况: 和等于0,同时移动左右指针

6、将链表倒序打印

好久不见. 提交于 2020-01-07 15:54:02
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 第一次 思考 分析:将链表倒序打印 脑暴:集合reverse、键值对知识点,都不合适。 重大失误点:1、不清楚链表是否支持根据索引获取属性值就想要实现。2、对于一个新的类型的题目,应该先了解基础知识(数据结构中的链表) 下次改进:1、自己的每一步思路需要查看API或者了解是否有这个方法可以实现,然后再写代码实现。2、将要做的题目分类,按照类别做,做一个新类别的算法题目时先去掌握基础的知识点。 复习:Java中的链表 Collection单列集合的ArrayList底层是链表、Map双列集合的HashMap的子类LinkedHashMap底层也是链表。两者的差别是:无序和有序。 复习之后的思路: 工具集分别有Array和Collections。Array的asList方法作用:将集合转数组,将数组转集合(需要泛型)。Collections中的判断、反转、等方法。 可以尝试使用Collections的方法来实现。 观察 学习思路: 1、冷静思考周全。发现有改变链表结构和不改变链表结构两种方式来实现,询问面试官是否可以更改链表的结构,根据面试官要求再进一步分析。 (此题一般不能更改结构,因为打印只是一个只读操作,面试官一般不希望打印时修改内容) 2、根据链表的特点发现,只能依次获取链表的每个值

Java 8 创建 Stream 的 10 种方式,我保证你受益无穷!

半腔热情 提交于 2019-12-22 19:10:14
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 之前栈长分享过 Java 8 一系列新特性的文章,其中重点介绍了 Stream. 获取上面这份 Java 8~12 系列新特性干货文章,请在微信搜索关注微信公众号:Java技术栈,在公众号后台回复:java。 今天来分享下在 Java 8 中创建 Stream 的 10 种方式,我就整理了 10 种,其实还有更多,仅供大家参考学习下。 1、Stream.of 可变参数 Stream<String> stream1 = Stream.of("A", "B", "C"); System.out.println("stream1:" + stream1.collect(joining())); 程序输出: stream1:ABC 2、Stream.of 数组 String[] values = new String[]{"A", "B", "C"}; Stream<String> stream2 = Stream.of(values); System.out.println("stream2:" + stream2.collect(joining())); 程序输出: stream2:ABC 看 Stream.of 源码,上面这两种方式其实就是第三种方式的包装版。 public static<T> Stream<T>

逗号拼接的字符串、数组、List、Set、Map之间的相互转换

大憨熊 提交于 2019-12-22 18:37:44
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 【逗号拼接的字符串------->数组】 String str = "a,b,c,1,2,3"; String[] strArray = str.split(","); 【数组------->逗号拼接的字符串】 String str = org.apache.commons.lang.StringUtils.join(strArray , ","); 需要引入Apache Commons组件中的个commons-lang.jar包 【Array------->List】 String[] strArray = {"a","b","c","1","2","3"}; List<String> strList = java.util.Arrays.asList(strArray); 【List-------> Array】 String strArray = strList.toArray(new String[0]); //new String[0]是指定返回数组的类型); 【List------->Set】 Set<String> strSet = new HashSet<>(strList); 【Set------->List】 List<String> strList = new ArrayList<>

【Java必修课】图说Stream中的skip()和limit()方法及组合使用

匆匆过客 提交于 2019-12-21 21:33:22
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1 简介 本文将讲解Java 8 Stream中的两个方法: skip() 和 limit() 。这两个方法是 Stream 很常用的,不仅各自会被高频使用,还可以组合出现,并能实现一些小功能,如 subList 和分页等。 2 skip()方法 见名知义, skip() 方法用于跳过前面n个元素,然后再返回新的流,如图所示: 来看看代码: List<Integer> result = Stream.of(1, 2, 3, 4, 5, 6) .skip(4) .collect(Collectors.toList()); List<Integer> expected = asList(5, 6); assertEquals(expected, result); 方法 skip() 的参数n的四种情况: (1)当 n<0 时,抛 IllegalArgumentException 异常; (2)当 n=0 时,相当没有跳过任何元素,原封不动、完璧归赵; (3)当 0<n<length 时,跳过n个元素后,返回含有剩下的元素的流; (4)当 n>=length 时,跳过所有元素,返回空流。 3 limit()方法 对于 limit() 方法,它是用于限制流中元素的个数,即取前n个元素,返回新的流,如图所示: 代码如下:

风铃虫入门教程:快速创建风铃虫

我们两清 提交于 2019-12-19 21:35:12
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 风铃虫实例主要有以下两种构建方式 通过风铃虫对象构建 //创建一个提取规则 //该提取规则标识使用 XPATH提取器进行提取,XPATH的表达式为 //h1[@class='topic-_XJ6ViSR']/text() , 该提取提取器的作用顺序是0 FieldExtractRule extractRule = new FieldExtractRule(Rule.XPATH, "//h1[@class='topic-_XJ6ViSR']/text()", "", 0); //创建一个提取项 ContentItem contentItem = new ContentItem(); contentItem .setFiledName("name") //提取项代码,不能为空 .setName("新闻标题") //提取项名字,可以不设置 .setRules(Arrays.asList(extractRule)); //设置提取规则 //创建一个风铃虫实例 CrawlerBuilder builder = CrawlerBuilder.create() .startUrl("https://news.ifeng.com/c/7sMchCLy5se") //风铃虫的起始链接 //