Collection:
Collection 不唯一,无序
List 不唯一,有序
Set 唯一,无序
ArrayList:内部使用长度可变的数组,遍历查询效率高
LinkedList:采用双向链表实现,增删改效率比较高
ArrayList:
常用方法:
ArrayList方法实例:
public static void main(String[] args) {
List list = new ArrayList();
list.add("张三");
list.add("李四");
list.add("王五");
list.add("马六");
System.out.println("大小为"+list.size());
//指定位置插入,后面的会往后走
list.add(3,"陈梦雨");
System.out.println(list);
//循环打印集合信息
for(Object obj:list){
System.out.println("循环打印"+obj);
}
//根据下标获取集合中的元素
Object aa = list.get(1);
System.out.println(aa);
String bb = (String) list.get(2);
System.out.println(bb);
System.out.println("第三个"+list.get(3));
//查找集合中是否存在指定元素
boolean ccc = list.contains("马六");
System.out.println(ccc);
//根据下标删除
list.remove(2);
//根据元素删除,删除后,后面的会自动补过来
list.remove("张三");
//清空所有内容
list.clear();
System.out.println("清空后集合长度:"+list.size());
//判断是否为空
System.out.println("判断集合是否为空:"+list.isEmpty());
}
LinkedList类:
LinkedList:采用双向链表实现,增删改效率比较高
常用方法:
链表本身不具备下标功能,但 LinkedList
类提供了下标访问方法以便于与 List
接口兼容。 所以LinkedList可以使用get()方法用来获取特定值。
Set接口:
Set接口存储一组唯一,无序的对象
Set接口不存在get()方法,因为没有下标
set接口下有两个实现类分别是HashSet和TreeSet
HashSet:
- 底层结构:基于哈希表(
HashMap
),不保持元素的顺序。 - 性能:提供常数时间复杂度的
add
,remove
, 和contains
操作,适用于快速访问。 - 特点:不保证元素的顺序,元素顺序可能会改变。对于需要不重复元素且对顺序无关的情况,
HashSet
非常合适。
TreeSet:
- 底层结构:基于红黑树(自平衡的二叉搜索树),保持元素的排序。
- 性能:提供对
add
,remove
, 和contains
操作的对数时间复杂度,适用于需要排序或范围查询的场景。 - 特点:自动对元素进行排序(自然顺序或通过提供的
Comparator
),使得可以遍历元素时按升序排列。
迭代器Iterator:
通过迭代器Iterator实现遍历
1.通过Set接口创建迭代器
2. hasNext(): 判断是否存在另一个可访问的元素
3.next(): 返回要访问的下一个元素
Set<String> set = new HashSet<>();
set.add("A");
set.add("B");
set.add("C");
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
方法2:增强型for循环
Set<String> set = new HashSet<>();
set.add("A");
set.add("B");
set.add("C");
for (String item : set) {
System.out.println(item);
}
Set接口如何判断加入对象是否已经存在呢?
采用对象的equals()方法比较两个对象是否相等,因为存放的是对象引用(地址
HashSet是Set接口常用的实现类
Set newsTitleSet = new HashSet();