Set
代表无序、不可重复的集合;List
代表有序、重复的集合;Map
则代表具有映射关系的集合;Queue
代表一种队列集合;Java集合类主要是由两个接口派生而出:Collection
和Map
数组:
长度不可变;
无法保存具有映射关系的数据;
数组元素可以是基本类型(byte,short,int,long,float,double,boolean,char)的值,也可以是对象(实际上保存的是对象的引用变量)
集合类:
可以保存长度不确定的数据;
可以保存具有映射关系的数据;
集合里保存的是对象(实际上保存的是对象的引用变量)
//programming=["Java","Python","C#","C++"]
programming.forEach(obj ->System.out.println("迭代集合元素:" + obj));
2.使用Iterator循环遍历Collection//programming=["Java","Python","C#","C++"]
var it = programming.iterator(); // 获取programming集合对应的迭代器
while (it.hasNext()){// it.next返回的是数据类型是Object类型,因此需要强制类型转换
var p = (String) it.next();
System.out.println(p);
}
3.使用foreach循环遍历Collection//programming=["Java","Python","C#","C++"]
for (var program : programming){var p = (String) program;
System.out.println(p);
}
三、使用Predicate操作集合public class temp {public static void main(String[] args) {var programming = new HashSet<>();
programming.add("Java");
programming.add("Python");
programming.add("C#");
programming.add("C++");
programming.add("JavaScript");
programming.add("Vue");
System.out.println(calculate(programming, ele ->((String) ele).length() == 3));
System.out.println(calculate(programming, ele ->((String) ele).contains("C")));
}
public static int calculate(Collection objs, Predicate p) {int total = 0;
for (var obj : objs) { // 使用Predicate的test()方法判断该对象是否满足Predicate指定的条件
if (p.test(obj)) {total++;
}
}
return total;
}
}
四、使用Stream操作集合独立使用stream的步骤如下:
public static void main(String[] args) {var is = IntStream.builder().add(3).add(1).add(2).add(9).build();
System.out.println("is所有元素是否都是偶数:" + is.allMatch(ele ->ele % 2 == 0));
var is1 = IntStream.builder().add(3).add(1).add(2).add(9).build();
var newIs = is1.map(ele ->ele * 3 + 5);
newIs.forEach(System.out::println);
// is.forEach(ele ->System.out.println(ele % 2));
}
Stream提供了大量的方法进行聚集操作,这些方法既可以是“中间的”,也可以是“末端的”。上述的allMatch就是末端操作,map是中间操作。
中间操作:允许流保持打开状态,并允许直接调用后续方法,中间方法的返回值是另外一个流;
末端方法:对流的最终操作。当对某个Stream执行末端方法后,该流将会被“消耗”,切不可再用。
所以上述的is流进行了allMatch末端操作后,被消耗,不可再次使用;
常用的中间操作:filter
、mapToXxx
、peek
、distinct
、sorted
、limit
等
常用的末端方法:forEach
、toArray
、reduce
、min
、max
、count
、anyMatch
、allMatch
、noneMatch
、findFirst
、findAny
等
HashSet按Hash算法来存储集合中的元素,因此具有很好的存取和查找性能。
自然排序
自然排序的对象要实现Comparable接口,而且应该是同一个类的多个实例;定制排序
在创建TreeSet对象时,提供一个Comparator对象与该TreeSet集合关联,由Comparator对象负责集合元素的排序逻辑;性能:EnumSet >HashSet >TreeSet
需要一个保持排序的Set:TreeSet
遍历:LinkedHashSet >HashSet
即一般情况下选HashSet
,需要排序
选TreeSort
,强调遍历
选LinkedHashSet
,枚举
选EnumSet
自然排序
定制排序
Set接口下有HashSet
、LinkedHashSet
、SortedSet
、TreeSet
、EnumSet
等子接口和实现类;
Map接口下有HashMap
、LinkedHashMap
、SortedMap
、TreeMap
、EnumMap
等子接口和实现类;
Map的类和子接口中Key集的存储形式和对应的Set集合中的元素存储形式完全相同;
从Java源码来看,Java先是实现了Map,然后通过包装一个所有value均为空对象的Map就实现了Set集合;
Map提供了一个Entry内部类来封装key-value对,而计算Entry存储时则只考虑Entry封装的key;
scores.forEach((key,value) ->System.out.println(key + "-->" + value));
4.Properties性能:EnumMap >HashMap(IdentityHashMap) >LinkedHashMap >Hashtable >TreeMap
强调排序:TreeMap >HashMap
synchronizedXxx
emptyXxx
、singletonXxx
、unmodifiableXxx
、(Java9新增的:Set、List、Map的of
方法)你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧