Tag: collections

在Java中声明LinkedList

我总是学习当我们声明我们应该做的集合时, Interface ob = new Class() ,如果我想使用例如LinkedList我会做List ob = new LinkedList() ,但是我无法访问来自LinkedList的所有方法..是不是LinkedList ob = new LinkedList() 100%正确吗?

为什么LinkedList和arraylist在java中扩展AbstractList?

为什么LinkedList和ArrayList在Java中扩展AbstractList ? 当我们想要在实现类中指定公共行为时,使用抽象类。 但是AbstractList中的所有方法都被ArrayList和LinkedList覆盖。 那么扩展这个类有什么用呢?

定向加权图的邻接表

我使用邻接列表来表示有向加权图,并根据此 SO问题提供的示例代码,我创建了以下内容: import java.util.HashMap; import java.util.LinkedHashSet; import java.util.LinkedList; import java.util.Map; import java.util.Set; public class _Graph { private Map<String, LinkedHashSet<HashMap>> map = new HashMap<String, LinkedHashSet<HashMap>>(); public void addEdge(String node1, String node2, int dist) { LinkedHashSet<HashMap> adjacent = map.get(node1); HashMap innerMap = new HashMap(); if(adjacent==null) { adjacent = new LinkedHashSet<HashMap>(); map.put(node1, adjacent); } innerMap.put(node2, dist); adjacent.add(innerMap); } […]

复制一组实体并在Hibernate / JPA中保留

我想在我的数据库中复制一组实体。 我用以下方式检索了这个系列: CategoryHistory chNew = new CategoryHistory(); CategoryHistory chLast = (CategoryHistory)em.createQuery(“SELECT ch from CategoryHistory ch WHERE ch.date = MAX(date)”).getSingleResult; List categories = chLast.getCategories(); chNew.addCategories(categories)// Should be a copy of the categories: OneToMany 现在我想复制一个’类别’列表并用EntityManager保存它。 我正在使用JPA / Hibernate。 UPDATE 在知道如何分离我的实体之后,我需要知道要分离的内容:当前代码: CategoryHistory chLast = (CategoryHistory)em.createQuery(“SELECT ch from CategoryHistory ch WHERE ch.date=(SELECT MAX(date) from CategoryHistory)”).getSingleResult(); Set categories =chLast.getCategories(); //detach […]

有没有像“(k,v)”那样流式传输地图而不是使用(条目)?

基本上我寻找一种避免使用的方法 entry -> entry.getValue 和 entry -> entry.getKey 类似于Map.forEach()function。 如果只有我可以得到一种工作方式map.stream().filter((k,v) -> ) …等等 看起来这个界面叫做BiConsumer。 或许转换为BiConsumer转换器或Stream.generate()

Java 8:使用lambda表达式初始化HashMap

我正在尝试一次声明和定义更大的哈希映射。 我是这样做的: public HashMap<Integer, Callable> opcode_only = new HashMap<Integer, Callable>() {{ put(x, y); put(x, y); }}; 但是,当我尝试在put使用lambda表达式时,我正在进行eclipse warrning / error。 这就是我在HashMap中使用lambda的方法: public HashMap<Integer, Callable> opcode_only = new HashMap<Integer, Callable>() {{ put(0, () -> { return “nop”; }); put(1, () -> { return “nothing….”; }); }}; Eclipse以逗号开头强调lambda的整个部分。 错误消息: Syntax error on token “,”, Name expected Syntax […]

列出维护排序的实现

Java中是否存在基于提供的Comparator维护订单的现有List实现? 可以通过以下方式使用的东西: Comparator cmp = new MyComparator(); List l = new OrderedList(cmp); l.add(someT); 以便插入someT ,以便根据cmp维护列表中的顺序 (关于@andersoj的建议我正在完成我的问题,还有一个请求) 此外,我希望能够按排序顺序遍历列表而不删除元素,即: T min = Const.SMALLEST_T; for (T e: l) { assertTrue(cmp.compare(min, e) >= 0); min = e; } 应该通过。 欢迎所有的建议(除了告诉我在无序的完整列表中使用Collections.sort ),但是,我更喜欢java.*或者最终的org.apache.*因为此时很难引入新的库。 注意:(UPDATE4)我意识到这种列表的实现会有不足的性能。 有两种一般方法: 使用链接结构(种类)B树或类似 使用数组和插入(使用二进制搜索) 没有1. CPU缓存未命中问题否2.在数组中移位元素有问题。 UPDATE2: TreeSet不起作用,因为它使用提供的比较器( MyComparator )来检查是否相等,并基于它假定元素相等并排除它们。 我需要那个比较器只用于排序,而不是“唯一性”过滤(因为元素按其自然顺序不相等) UPDATE3: PriorityQueue不能作为List (因为我需要)工作,因为没有办法按照它“排序”的顺序遍历它,要获得排序顺序中的元素,你必须从集合中删除它们。 更新: 类似的问题: 一个很好的Java排序列表 Java中的排序数组列表

API java 5及更多:我应该返回一个数组还是一个Collection?

本着最佳实践的精神:总是返回一个____,从不____ ,我在即将从JDK1.4.2迁移到JDK5以及更多时遇到类似的问题。 (是的,我知道 , JDK1.4.2是EOL! ;-))。 对于返回集合的函数(不是简单的属性集合 ),我总是更喜欢(在JDK1.4.2中)返回一个Array而不是一个通用的List,因为: 它强制执行返回类型( MyObject[]而不是对象列表,在静态上更加类型安全 – 如’编译’ – 级别) 它为返回的集合建议一个“只读”字符(将一个元素添加到集合中会更复杂,即使这不像c#中的’只读’关键字那样严格)。 这与说“不可变”不同,因为数组中的引用仍然可以修改… 当然,我总是创建这个返回的数组(我没有公开任何’内部’数组) 现在,在JDK5及更多版本中,如果需要,我可以使用List 。 在java5中编码时选择返回MyObject[]而不是List或Collection什么好理由? 奖金,如果使用Collection ,是否可以: 对返回的集合强制执行只读属性? (没有add()或remove()可能) 对返回的集合强制执行不可变的方面? (甚至不能修改该集合的引用) PS: JavaGenericFAQ没有那个。

将for循环转换为concat String转换为lambda表达式

我有以下for循环,它循环遍历字符串列表并将每个单词的第一个字符存储在StringBuilder 。 我想知道如何将其转换为lambda表达式 StringBuilder chars = new StringBuilder(); for (String l : list) { chars.append(l.charAt(0)); }

Trie节省空间,但如何?

我很困惑Trie实现如何以最紧凑的forms节省空间并存储数据! 如果你看下面的树。 在任何节点上存储字符时,还需要存储对该字符的引用,因此对于存储其引用所需的字符串的每个字符。 好的,当一个普通角色到达时我们节省了一些空间,但是在存储对该角色节点的引用时我们失去了更多空间。 那么维护这棵树本身不是很多结构开销吗? 相反,如果使用TreeMap代替这个,让我们说实现一个字典,这可以节省更多的空间,因为字符串将被保存在一个片段中因此没有浪费存储引用的空间,不是吗?