微信公众号登录wordpress网站吗,微信公众号 链接微网站,平台里的钱提现不了怎么追回,ysl免费网站建设一、集合的概念
集合#xff1a;将若干用途、性质相同或相近的“数据”组合而成的一个整体
Java集合中只能保存引用类型的数据#xff0c;不能保存基本类型数据
数组的缺点#xff1a;长度不可变
Java中常用集合#xff1a;
1.Set(集):集合中的对象不按特定方式排序将若干用途、性质相同或相近的“数据”组合而成的一个整体
Java集合中只能保存引用类型的数据不能保存基本类型数据
数组的缺点长度不可变
Java中常用集合
1.Set(集):集合中的对象不按特定方式排序并且没有重复对象
2.List(列表):集合中的对象按照索引位置排序可以有重复对象允许按索引位置索引对象
3.Map(映射):集合中的每个元素包含一个键对象和值对象集合中没有重复的键对象值对象可以重复 二、Collection接口
public class CollectionTest {public static void main(String[] args) {//Collection是接口需要用实现类创建对象Collection c new ArrayList();//集合中保存多少长度System.out.println(获取集合的长度c.size());//如果没有数据返回true有数据返回falseSystem.out.println(判断集合是否为空c.isEmpty());//往集合中添加数据用add方法c.add(张三);//集合中是不能保存基本数据类型的只能保存对象类型//而基本数据类型可以保存的原因是jdk1.5之后基本数据类型会跟包装类类型进行默认转换c.add(123);c.add(true);c.add(a);c.add(99.5);//集合重写了Object的toString方法所以打印显示的内容不是地址System.out.println(c);System.out.println(c.size());//删除集合中的数组c.remove(123);System.out.println(c);//删除数据之后集合的长度会发生改变但是数组的长度不会System.out.println(c.size());//将集合转换为数组的方法Object []objects c.toArray();for(Object o :objects){System.out.println(o );}}
}
三、Iterator接口
Iterator接口的作用遍历容器中的元素
Iterator接口的方法
boolean hasNext()
Object next()
void remove()
public class IteratorTest {public static void main(String[] args) {//Collection是接口需要用实现类创建对象Collection c new ArrayList();c.add(123);c.add(true);c.add(a);c.add(99.5);//使用迭代器遍历集合Iterator it c.iterator();//hasNext方法用于判断后面是否还有数据如果有则返回true如果没有数组则返回falsewhile(it.hasNext()){//next方法用于获取集合中的数据System.out.println(it.next());}}
}四、Set
1.Set接口未提供额外的方法
2.Set的实现类HashSet、TreeSet
3.HashSet类按照哈希算法存取集合中的对象
1哈希算法判断集合中的元素是否重复先判断对象的hashcode然后使用equals()方法
2为了使HashSet正常工作类重写equals()方法时必须重写hashcode()方法以保证两个引用同一对象的两个变量的hashcode也一致
4.TreeSet能够对集合中的对象进行自动排序
1集合中的对象必须可以比较
2自然排序集合中的对象进行比较然后进行升序排列 集合中对象的类必须实现java.lang.Comparable接口使用compareTo()方法进行比较 Java类库中实现Comparable接口的常用类 3自定义排序
如果希望TreeSet类的对象按着自定义方式排序需要让集合中对象的类实现java.util.Comparator接口
5.set集合不可以重复的不仅仅是同一个对象不能保存进set集合不同对象内容相同的也不能保存进集合中说到比较首先想到的是equals但是set集合为了提交比较效率会先进行hash比较hash值是对象的内容经过一系列hash计算得到的一个整数。如果两个对象的hash值不同则表示不是同一个对象如果hash值相同则证明这两个对象可能是同一个对象要进行equals比较方法出现hash值相同但是内容不同的情况偶然发生。
public class SetTest {public static void main(String[] args) {//set集合特点无序(指添加到集合中的顺序和显示集合的顺序不一致)不可以重复Set set new HashSet();set.add(123);set.add(true);set.add(a);set.add(99.5);//set集合无序不可以重复不仅仅是同一个对象不能重复不同对象内容重复也不能保存到set集合里String s1 world;String s2 new String(world);set.add(s1);set.add(s2);System.out.println(set);}
}public class Test {public static void main(String[] args) {Set set new HashSet();Student s1 new Student(1001,l,18);Student s2 new Student(1001,l,18);Student s3 new Student(1001,s,20);set.add(s1);set.add(s2);set.add(s3);System.out.println(set);}
}
class Student{int no;char name;int age;public Student (int no,char name,int age){this.age age;this.name name;this.no no;}//要想让自己写的类在set集合中正常保存就需要重写equals的同时重写hashCode方法//正常保存指的是同一个对象不能保存进集合中不同对象内容相同也不能保存进集合中Overridepublic boolean equals(Object o) {if(this o ){return true;}//判断o对象是不是有Student创建的if(o instanceof Student){Student s (Student)o;//在逐一比较每个属性的值是否相同if (age s.agename s.namenos.no){return true;}}return false;}Overridepublic int hashCode() {return age*5name*5no*5;}
}五、List
1.List元素都对应一个整数类型的序号记录其在集合中的位置可以根据序号存取集合中的元素
2.List的实现类ArrayList、LinkedList等
3.Arrays补充方法List asList(数组类型 a)
4.ArrayList:
(1)代表长度可变的数组
(2)查询速度较快、增删改速度较慢
5.LinkedList: (1)采用链表数据结构对顺序访问进行优化 (2)增删改速度较快查询速度较慢
注意一定要实际问题实际分析规律可能会发生变化
public class ListTest {public static void main(String[] args) {//list集合有序可以重复可以通过索引获取对应位置的数据List list new LinkedList();list.add(123);list.add(hello);list.add(false);list.add(true);list.add(98.2);list.add(l);System.out.println(list);//get方法通过索引获取对应位置的数据System.out.println(获取索引为2第三个位置的数据list.get(2));//set方法修改指定位置的数据的值list.set(1,hello world);System.out.println(list);//在指定索引位置添加数据list.add(1,hello);System.out.println(list);//删除指定索引位置的数据list.remove(1);System.out.println(list);//将数组转换为集合,那么数组保存数据类型必须是对象类型基本数据类型要使用包装类Integer[] a {1,2,3,4,5,6,7,8,9};List list1 Arrays.asList(a);System.out.println(list1);//List集合的便利形式//第一种转换数组在遍历Object[] object list1.toArray();for (Object o: object){System.out.print(o );}System.out.println();//第二中使用迭代器遍历Iterator it list1.iterator();while (it.hasNext()){System.out.print(it.next() );}System.out.println();//第三种直接遍历使用get方法获取数据for (int i0;ilist1.size();i){System.out.print(list1.get(i) );}System.out.println();//第四种使用foreach循环遍历for(Object o:list1){System.out.print(o );}}}
六、Map
1.Map中存储的元素通常都是由key来表示所以同一Map中key值不能重复value值无要求
2.Map的实现类HashMap、TreeMap
3.Map接口的属性Entry——映射项键-值对
public class MapTest {public static void main(String[] args) {Map map new HashMap();//Map集合以键值对的形式保存数据键不能重复值可以重复//put方法往Map集合中保存数据map.put(a,123);map.put(1,false);map.put(a,95.5);map.put(true,100);System.out.println(map);//map集合保存数据要求key不能重复但是如果重复了也不会报错//会用心地value值将之前的数据覆盖掉map.put(true,200);System.out.println(map);//get方法根据key值获取对应的value值System.out.println(map.get(true));//根据key值删除map集合中的数据map.remove(a);//当要删除的key不存在的时候代码书写执行不会报错就是没有删除而已map.remove(false);System.out.println(map);System.out.println(获取map集合中的元素个数 map.size());//clear清空集合//map.clear//遍历map集合//1.通用遍历形式 最通用Set set map.entrySet();Iterator it set.iterator();while (it.hasNext()){Map.Entry entry (Map.Entry) it.next();System.out.println(保存数据时候的key值 entry.getKey());System.out.println(保存数据时候的value值 entry.getValue());System.out.println();}//2.特殊形式的遍历Map map1 new HashMap();//当key值都是有规律的且不同的是一段连续的数字那么就可以通过get方法来获取//数据从而遍历集合map1.put(item0,123);map1.put(item1,true);map1.put(item2,k);map1.put(item3,k);map1.put(item4,1000);for (int i 0;imap1.size();i){System.out.println(map1.get(itemi));}}}
七、Collections类
java.util.Collections类提供一系列的基于集合操作的常用静态方法
public class CollectionsTest {//Collection类是专门操作集合的类public static void main(String[] args) {List list new ArrayList();list.add(hello);list.add(zhangsan);list.add(zhao);list.add(wangwu);list.add(liuxuiang);list.add(zhaoliu);//排序Collections.sort(list);System.out.println(list);//倒序Collections.reverse(list);System.out.println(list);//乱序Collections.shuffle(list);System.out.println(list);}
}
public class Demo {public static void main(String[] args) {List list new ArrayList();Teacher t1 new Teacher(1001,张三,18);Teacher t2 new Teacher(1002,张四,19);Teacher t3 new Teacher(1003,张五,20);list.add(t1);list.add(t2);list.add(t3);Collections.sort(list);System.out.println(list);}
}
class Teacher implements Comparable{int no;String name;int age;public Teacher (int no,String name,int age){this.no no;this.name name;this.age age;}Overridepublic String toString() {return Teacher{ no no , name name \ , age age };}Overridepublic int compareTo(Object o) {if (o instanceof Teacher){Teacher t (Teacher) o;//this 表示的是前一个数 o表示的是数组中的后一个数·//-1表示不需要交换正数表示需要交换返回正数就行if (t.agethis.age){return -1;} else if(t.agethis.age){return 1;}}return 0;}
}八、泛型
1.为何使用泛型
进入集合的对象都当作Object类型从而失去了自己的类型取出后也是Object类型使用前通常要进行强制转换容易出现ClassCastException异常
2.原因装入集合的时候无法指定装入的元素是何种类型
3.泛型
1装入集合的时候指定元素的具体的类型
2增强程序的稳定性与可读性
4.集合中使用泛型
5.定义泛型类
1使用T用来声明一个型态持有者名称T可以替换其它标示符
2在定义泛型类时可以声明多个泛型类型 一般形式class 类名称 T1,T2
3声明及配置对象时不一定指定型态默认会使用Object型态编译时编译程序会提出警告
4可以使用泛型机制来声明一个数组可以用数组代理T
5不可以使用泛型来建立数组的实例不能new T[]
6.限制泛型的可用类型
一般形式:class 类名称 T extends anyClass
anyClass为类或接口此类中的泛型必须是实现或继承了anyClass
7.使用类型通配符
一般形式泛型名称? extends anyClass设定上限
一般形式泛型名称? super anyClass设定下限
public class GenericTest {public static void main(String[] args) {ListString list new ArrayListString();list.add(123);list.add(hello);//添加泛型之后在想往集合中和保存其它类型的数据就会报错//list.add123System.out.println(list);//泛型不会让保存到集合中的数据丢失自己本身的类型所以取值的时候就不需要进行类型转换了IteratorString it list.iterator();while (it.hasNext()){String s it.next();System.out.println(s);}//集合中只能保存对象类型所以在写泛型的时候只能写包装类型不能写基本数据类型MapString,Integer map new HashMap();map.put(a,5);}}