淘宝天猫优惠卷网站建设,首饰行业网站建设策划,c 网站开发中间层怎么写,做一个网站能挣多少钱1. List接口
List接口继承自Collection接口#xff0c;List接口实例中允许存储重复的元素#xff0c;所有的元素以线性方式进行存储。在程序中可以通过索引访问List接口实例中存储的元素。另外#xff0c;List接口实例中存储的元素是有序的#xff0c;即元素的存入顺序和取…1. List接口
List接口继承自Collection接口List接口实例中允许存储重复的元素所有的元素以线性方式进行存储。在程序中可以通过索引访问List接口实例中存储的元素。另外List接口实例中存储的元素是有序的即元素的存入顺序和取出顺序一致。
1.1. List接口的常用方法
List作为Collection集合的子接口不但继承了Collection接口中的全部方法而且还增加了一些根据元素索引操作集合的特有方法。List接口的常用方法如下表所示。 方法声明 功能描述 void add(int index,Object element) 将元素element插入List的index索引处 boolean addAll(int index,Collection c) 将集合c所包含的所有元素插入到List集合的index索引处 Object get(int index) 返回集合index索引处的元素 Object remove(int index) 删除index索引处的元素 Object set(int index, Object element) 将index索引处元素替换成element对象并将替换后的元素返回 int indexOf(Object o) 返回对象o在List中第一次出现的位置索引 int lastIndexOf(Object o) 返回对象o在List中最后一次出现的位置索引 List subList(int fromIndex, int toIndex) 返回从索引fromIndex包括到 toIndex不包括处所有元素集合组成的子集合
1.2. ArrayList
ArrayList是List接口的一个实现类它是程序中最常见的一种集合。ArrayList集合内部封装了一个长度可变的数组对象当存入的元素超过数组长度时ArrayList会在内存中分配一个更大的数组来存储这些元素因此可以将ArrayList集合看作一个长度可变的数组。
public class TestDemo {Testpublic void test(){ArrayList list new ArrayList(); // 创建ArrayList集合list.add(张三); // 向集合中添加元素list.add(李四);list.add(王五);list.add(赵六);System.out.println(集合的长度 list.size()); //获取集合中元素的个数System.out.println(第2个元素是 list.get(1)); //取出并打印指定位置的元素list.remove(3); //删除索引为3的元素System.out.println(删除索引为3的元素:list);list.set(1,李四2); //替换索引为1的元素为李四2System.out.println(替换索引为1的元素为李四2:list);}}
1.3. ArrayList练习
ArrayList存储多个学生信息学生信息包含name和age属性然后for循环输出学生信息。 Student类
public class Student {private String name;private int 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;}Overridepublic String toString() {return Student{ name name \ , age age };}
} 测试类
public class TestDemo {Testpublic void test(){Student stu1 new Student();stu1.setName(张三);stu1.setAge(20);Student stu2 new Student();stu2.setName(李四);stu2.setAge(22);ArrayList list new ArrayList();list.add(stu1);list.add(stu2);for(int i0;ilist.size();i){Student stu (Student) list.get(i);System.out.println(stu);}}}
1.4. LinkedList
由于ArrayList集合的底层是使用一个数组来存储元素在增加或删除指定位置的元素时会创建新的数组效率比较低因此Arraylist集合不适合做大量的增删操作而适合元素的查找。为了克服ArrayList集合在查询元素时速度很快但在增删元素时效率较低的局限性可以使用List接口的另一个实现类LinkedList。
LinkedList集合内部维护了一个双向循环链表链表中的每一个元素都使用引用的方式记录它的前一个元素和后一个元素从而可以将所有的元素彼此连接起来。当插入一个新元素时只需要修改元素之间的引用关系即可删除一个节点也是如此。正因为这样的存储结构所以LinkedList集合增删效率非常高。
1LinkedList集合添加、删除元素过程如下图所示。 2LinkedList案例
public class TestDemo {Testpublic void test(){LinkedList link new LinkedList(); // 创建LinkedList集合link.add(张三);link.add(李四);link.add(王五);link.add(赵六);System.out.println(link.toString()); // 获取并打印该集合中的元素link.add(3, Student); // 向link集合中索引3处插入元素Studentlink.addFirst(First); // 向link集合第一个位置插入元素FirstSystem.out.println(link);System.out.println(link.getFirst()); // 取出link集合中第一个元素link.remove(3); // 移除link集合中指定索引位置为3的元素link.removeFirst(); // 移除link集合中第一个元素System.out.println(link);}}
1.5. LinkedList练习
LinkedList存储多个学生信息学生信息包含name和age属性然后for循环输出学生信息。 Student类
public class Student {private String name;private int 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;}Overridepublic String toString() {return Student{ name name \ , age age };}
} 测试类
public class TestDemo {Testpublic void test(){Student stu1 new Student();stu1.setName(张三);stu1.setAge(20);Student stu2 new Student();stu2.setName(李四);stu2.setAge(22);LinkedList list new LinkedList();list.add(stu1);list.add(stu2);for(int i0;ilist.size();i){Student stu (Student) list.get(i);System.out.println(stu);}}}
2. 集合遍历
Iterator接口是Java集合框架中的一员但它与Collection、Map接口有所不同Collection接口与Map接口主要用于存储元素而Iterator主要用于迭代访问遍历Collection中的元素通常情况下Iterator对象也被称为迭代器。
2.1. 迭代器迭代元素过程
迭代器对象在遍历集合时内部采用指针的方式来跟踪集合中的元素。迭代器迭代元素过程如下图所示。 注意通过迭代器获取ArrayList集合中的元素时这些元素的类型都是Object类型如果想获取到特定类型的元素则需要进行对数据类型强制转换。
2.2. 迭代器案例
public class TestDemo {Testpublic void test(){ArrayList list new ArrayList(); // 创建ArrayList集合list.add(张三); // 向该集合中添加字符串list.add(李四);list.add(王五);list.add(赵六);Iterator it list.iterator(); // 获取Iterator对象while (it.hasNext()) { // 判断ArrayList集合中是否存在下一个元素Object obj it.next(); // 取出ArrayList集合中的元素System.out.println(obj);}}}
2.3. 迭代器练习
ArrayList存储多个学生信息然后使用Iterator遍历输出学生信息。 Student类
public class Student {private String name;private int 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;}Overridepublic String toString() {return Student{ name name \ , age age };}
} 测试类
public class TestDemo {Testpublic void test(){Student stu1 new Student();stu1.setName(张三);stu1.setAge(20);Student stu2 new Student();stu2.setName(李四);stu2.setAge(22);ArrayList list new ArrayList();list.add(stu1);list.add(stu2);//遍历Iterator it list.iterator();while (it.hasNext()){Student stu (Student) it.next();System.out.println(stu);}}}
3. Set接口
3.1. Set接口概述
Set接口也继承自Collection接口它与Collection接口中的方法基本一致并没有对Collection接口进行功能上的扩充。与List接口不同的是Set接口中元素是无序的并且都会以某种规则保证存入的元素不出现重复。
Set接口常见的实现类有3个分别是HashSet、LinkedHashSet、TreeSet。其中HashSet根据对象的哈希值来确定元素在集合中的存储位置具有良好的存取和查找性能LinkedHashSet是链表和哈希表组合的一个数据存储结构TreeSet则是以二叉树的方式存储元素它可以对集合中的元素进行排序。
3.2. HashSet
HashSet是Set接口的一个实现类它所存储的元素是不可重复的。当向HashSet集合中添加一个元素时首先会调用该元素的hashCode()方法来确定元素的存储位置然后再调用元素对象的equals()方法来确保该位置没有重复元素。Set集合与List集合存取元素的方式都一样但是Set集合中的元素是无序的。
1HashSet案例
public class TestDemo {Testpublic void test(){HashSet hset new HashSet(); // 创建HashSet集合hset.add(张三); // 向该Set集合中添加字符串hset.add(李四);hset.add(王五);hset.add(李四); // 向该Set集合中添加重复元素Iterator it hset.iterator(); // 获取Iterator对象while (it.hasNext()) { // 通过while循环判断集合中是否有元素Object obj it.next(); // 如果有元素就调用迭代器的next()方法获取元素System.out.println(obj);}}}
2HashSet存储元素的流程
当调用HashSet集合的add()方法存入元素时首先调用HashSet集合的hashCode()方法获得元素对象的哈希值然后根据对象的哈希值计算出一个存储位置。如果该位置上没有元素则直接将元素存入。如果该位置上有元素存在则会调用equals()方法让当前存入的元素和该位置上的元素进行比较如果返回的结果为false就将该元素存入集合返回的结果为true则说明有重复元素就将需要存入的重复元素舍弃。 3HashSet存储自定义对象
HashSet存储多个学生信息然后使用Iterator遍历输出学生信息。
注意HashSet中如果去掉地址不同但是内容相同的Student的重复元素需要定义在Student类时重写hashCode()和equals()方法。 Student类
public class Student {private String name;private int 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;}Overridepublic String toString() {return Student{ name name \ , age age };}Overridepublic boolean equals(Object o) {if (this o) return true;if (o null || getClass() ! o.getClass()) return false;Student student (Student) o;return age student.age Objects.equals(name, student.name);}Overridepublic int hashCode() {return Objects.hash(name, age);}
} 测试类
public class TestDemo {Testpublic void test(){Student stu1 new Student();stu1.setName(张三);stu1.setAge(20);Student stu2 new Student();stu2.setName(李四);stu2.setAge(22);Student stu3 new Student();stu3.setName(李四);stu3.setAge(22);HashSet hset new HashSet(); // 创建HashSet集合hset.add(stu1);hset.add(stu2);hset.add(stu3);Iterator it hset.iterator(); // 获取Iterator对象while (it.hasNext()) {Object obj it.next();System.out.println(obj);}}}