Java基础
Java集合框架
什么是集合?
对象的容器,定义了对多个对象进程操作的常用方法。可实现数组的功能。
与数组的区别是什么?
1. 数组长度固定,集合长度是不固定
1. 数组可以存储基本类型和引用类型,而集合只能存储引用类型
Collection体系集合
Collection ----Interface
List Set ----Interface
ArrayList LinkedList Vector HashSet SortedSet ----Class
TreeSet ----Class
Collection是此体系结构的根接口,代表一组对象,称为集合
List接口的特点是 有序、有下标、元素可以重复可以重复可以重复
Set接口的特点是 无序、无下标、元素不可重复不可重复不可重复
-
Collection父接口
- 特点:代表一组任意类型的对象,无序、无下标、不能重复
public class Demo1 { //Collection接口的使用 public static void main(String[] args) { //创建一个集合 Collection col = new ArrayList(); //添加元素 col.add("apple"); col.add("watermelon"); col.add("bannana"); col.add("pear"); System.out.println("元素个数:"+ col.size()); System.out.println(col); //删除元素 col.remove("bannana"); System.out.println("删除后元素个数:"+ col.size()); // col.clear();//清空元素 //遍历元素 for (Object obj:col) { System.out.println(obj); } System.out.println("================="); Iterator it = col.iterator();//使用迭代器遍历集合 /* 迭代器是专门用来遍历的一种方式 hasNext() 判断有无下一个元素 next() 获取下一个元素 remove() 删除当前元素 */ while (it.hasNext()){ System.out.println(it.next()); // it.remove(); } // System.out.println(col.size()); //判断 System.out.println(col.contains("pear"));//判断是否包含pear System.out.println(col.isEmpty());//判断是否为空 } }
public class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
public class TestStudent {
public static void main(String[] args) {
Student stu1 = new Student("zhangsan",18);
Student stu2 = new Student("lisi",19);
Student stu3 = new Student("wangwu",20);
Student stu4 = new Student("laoliu",25);
Collection col = new ArrayList();
//添加student对象至集合中
col.add(stu1);
col.add(stu2);
col.add(stu3);
col.add(stu4);
System.out.println("元素个数:"+col.size());
System.out.println(col);//这里还是会调用重写的toString方法
//删除元素
System.out.println("由于张三太狂了要开除");
col.remove(stu1);
System.out.println(col.size());
System.out.println(col.toString());//这里可以法toString是灰色的意味这即使不写也会隐式调用
//遍历
System.out.println("++++++++++++++++++++++");
for (Object x:col){
System.out.println(x); //这里同样会调用Student的toString方法
}
System.out.println("==========================");
Iterator it = col.iterator();
while (it.hasNext()){
//同理 next()返回的是Object类上上面一致
System.out.println(it.next());
}
//判断
System.out.println(col.isEmpty());
System.out.println(col.contains("张三"));
}
}
List子接口
-
特点:有序、有下标 、元素可以重复
-
方法:add、allAll、get、subList、
public class Demo1 { public static void main(String[] args) { //创建List集合 List list = new ArrayList<>(); //添加元素 list.add("a"); list.add("b"); list.add("c"); list.add("d"); list.add(1,"d"); System.out.println("元素个数:"+list.size()); System.out.println(list.toString()); //删除 list.remove("d");//删除顺序靠前的元素d list.remove("d"); list.remove(1);//删除序列为1的元素 System.out.println("删除后元素个数:"+list.size()); System.out.println(list.toString()); System.out.println("========================"); //遍历 for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } System.out.println("foreach"); for (Object obj : list) { System.out.println(obj); } System.out.println("Iterator"); Iterator it = list.iterator(); while (it.hasNext()){ System.out.println(it.next()); } System.out.println("ListIterator顺序"); ListIterator it2 = list.listIterator(); while (it2.hasNext()){ System.out.println(it2.nextIndex()+":"+it2.next()); } System.out.println("ListIterator反序"); //一定要先进行由前向后输出,之后才能进行由后向前的输出,所以这里的新迭代器直接反序什么都输出不了 ListIterator it3 = list.listIterator(); while (it2.hasPrevious()){ System.out.println(it2.previousIndex()+":"+it2.previous()); } //判断 System.out.println(list.contains("a"));//是否存在元素a System.out.println(list.isEmpty());//是否为空 //获取元素位置 System.out.println(list.indexOf("a")); } public class Demo2 { public static void main(String[] args) { //创建集合 List list = new ArrayList(); //添加数字类型数字会自动装箱 list.add(23); list.add(23.23); list.add(2345); list.add(234.3453); list.add(342.2); System.out.println(""+list.size()); System.out.println(list); //删除 // list.remove(1); // list.remove((Object)23); // list.remove(new Integer(23)); //上面三种结果一致 List list2 = list.subList(1,4);//含左不含右 System.out.println(list2); } }