List集合
1、List集合的特点:
- 有序的:存储和取出的元素顺序是一致的
- 可重复:存储的元素是可以重复的
2、List的特有方法:
- add(需要插入元素的位置,需要插入的元素) 在集合中的指定位置插入元素;
- remove() 删除索引处的元素,并返回该元素
- set(需要修改元素的位置,修改后的元素) 指定索引处的元素,返回被修改的元素;
- get() 返回指定索引处的元素
package List;
import java.util.ArrayList;
import java.util.List;
/**
* list集合的操作是带索引的,索引不能越界
*/
public class ListDemo02 {
public static void main(String[] args) {
List<String> list =new ArrayList<String>();
list.add("java");
list.add("hallo");
list.add("world");
list.add("java");
//输出集合的数据
System.out.println(list);
//add(3,"lqv"),在指定的3下标位置添加数据lqv
System.out.println("在三号下标处添加元素lqv");
list.add(3,"lqv");
System.out.println(list);
//remove(1) ,删除指定索引处的元素,并显示出来
System.out.println("删除指定索引处的元素,并显示出来");
String jj=list.remove(1);
System.out.println(list);
System.out.println("返回发元素是:"+jj);
//set(需要修改元素的位置,修改后的元素) 修改指定索引处的元素,返回被修改的元素;
System.out.println("修改指定索引处的元素,返回被修改的元素");
String dd=list.set(2,"lisi");
System.out.println(list);
System.out.println("修改的元素是:"+dd);
//get() 返回指定索引处的元素
System.out.println("返回三号下标的元素");
String s = list.get(3);
System.out.println(s);
System.out.println("--------");
//遍历集合
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
}
3、Listlterator迭代器
它是通过Listlterator()方法得到的,所以说它是List集合特有的迭代器
package List;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class Listlterator {
public static void main(String[] args) {
//创建List集合
List<String> list=new ArrayList<String>();
//添加元素
list.add("hello");
list.add("world");
list.add("java");
list.add("world");
/**
* Listlerator迭代器
* 通过List集合,得到Listlterator()的方法;
*/
ListIterator<String> lit=list.listIterator();
/*//正向遍历
while (lit.hasNext()){
System.out.println(lit.next());
}
System.out.println("---------");
//反向遍历
while (lit.hasPrevious()){
System.out.println(lit.previous());
}*/
//add() 该方法是将制定元素插入列表
while (lit.hasNext()){
String s = lit.next();
if(s.equals("world")){
lit.add("javaee");
}
}
System.out.println(list);
}
}
4、List的两个子类
- ArrayList: 它的底层数据结构是数组,查询快,增删慢
- LinkedList:它的底层数据结构是链表,查询慢,增删快
set集合
1、set集合的特点:不包含重复的元素的,没有带索引的方法,所以set是不支持普通的for循环的方法的;
2、哈希值:是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值,
3、对象的哈希值特点:
- 同一个对象多次调用hashCode(方法返回的哈希值是相同的
- 默认情况下,不同对象的哈希值是不同的。而重写hashCode()方法,可以实现让不同对象的哈希值相同
4、Hashset
- 底层的数据结构是哈希表
- 不会有重复的元素,不支持普通的for遍历,实现的顺序会变化
public class set {
public static void main(String[] args) {
//创建一个hashSet对象
HashSet<List_Student> hs=new HashSet<List_Student>();
//实例化一个学生对象
List_Student LS1 = new List_Student("java",23);
List_Student LS2 = new List_Student("李四",23);
List_Student LS3 = new List_Student("张三",25);
List_Student LS4 = new List_Student("java",23);
//添加数据
hs.add(LS1);
hs.add(LS2);
hs.add(LS3);
hs.add(LS4);
//for循环遍历
for (List_Student a:hs){
System.out.println(a.getName()+","+a.getAge());
}
}
}
5、LinkedHashSet
- LinkedHashSet集合特点:
- 哈希表和链表实现的Set接口,具有可预测的迭代次序
- 由链表保证元素有序,也就是说元素的存储和取出顺序是一致的
- 由哈希表保证元素唯一,也就是说没有重复的元素
6、TreeSet
- 不包含重复的元素,没有索引不能用普通的for循环;
- 元素有序,元素的存储和取出是有序的,构造方法决定了具体的排序方式
- TreeSet():根据元素的自然顺序进行排列
- TreeSet(Comparator comparator):有参构造是按照比较器进行比较的
public class TreeSetDemo {
public static void main(String[] args) {
//创建一个TreeSet集合对象
TreeSet<Integer> Ts=new TreeSet<Integer>();
//向集合中插入数据
Ts.add(30);
Ts.add(20);
Ts.add(15);
Ts.add(80);
Ts.add(7);
Ts.add(60);
Ts.add(60);
//遍历输出数据
for (Integer s:Ts){
System.out.println(s);
}
}
}