网站做现金抽奖 能通过/seo搜索优化是什么
1、什么是集合,有什么用?
数组其实就是一个集合,集合实际上就是一个容器,可以来容纳其他类型的数据。
集合是一个容器,是一个载体,可以一次容纳多个对象
在实际开发中,假设连接数据库,数据库当中有10条记录,
那么 假设把这10条记录查询出来,那么java程序会将10条数据封装成10个java对象,然后将10个java对象放到一个·集合中,将集合传到前端,然后遍历集合,讲一个数据一个数据的展现出来。
2、集合不能存储基本数据类型,另外集合也不能存储java对象,集合当中储存的都是java对象的内存地址。(或者说集合中储存的是引用)list.add(100)实际上是一个装箱成integer的过程,然后再放入到链表中。
集合在java中本身是一种容器,是一个对象,存储的元素实际上是引用。
3、java中不同的集合对应不同的数据结构,往不同的集合中存储元素,等于将数据放入不同的数据结构中。
4集合类都在java.util.*包下
所有的集合类和集合接口都在java.util包下。
5、Java中集合分为两大类
一类是单个方式存储元素
单个方式存储元素,这一类集合中超级父接口:java.util.Collection;
一类是以键值对的方式存储元素
以键值对的方式存储元素,这一类集合中超级父接口:java.util.Map;
6、背会集合的集成结构图
java.util.Collection;
java.util.Map;
7、collection中常用的方法(继承他的接口和子类都可以用。)
8、iterator迭代器在collection接口中的使用
因为collection是继承的iterable的接口,因此所有的collection都能用迭代器。迭代器是个对象,有三个方法hasNext(),it.Next()
Iterator it=c.iterator();这句话的意思是:通过c中的iterator()函数返回一个Iterator类名字是 通过一个引用it指向它。
迭代器的运行原理:
迭代器中的remove函数:
首先为什么要调用迭代器自带的remove()函数,这个函数跟集合自带的remove函数有何区别:
下面是报错的代码:
这里使用c2.remove()函数后由于迭代器类似于一种快照的形式,创建迭代器之后,迭代器中的元素就不会变了,这时如果删掉或者添加一个元素,这时集合和迭代器的元素不同,就会报ConcurrentModificationException的异常,因此如果想要不报错,只有两种方式,要么每次集合变化后都创建一个迭代器,要么使用迭代器自己的remove()方法对集合的元素进行删除。
9、contains()方法
功能:boolean contains(Object o)
判断集合中是否包含某对象
如果包含返回true,如果不包含返回false
这里遇到一个问题,首先c中确实不包含x,因为x是一个引用,里面储存的是内存地址,但是内存地址指向的对象字符串跟c中的某些字符串是相同的,又由于contains()方法现在的对象是字符串所以调用的是String类型中的equals方法,而string,类中equals()方法已经重写了,因此比较的不再是内存地址,而是比较字符串是否是一样的,所以这里的结果返回的是true。
同一种情况,发挥false的情况:
这种情况的原因是:这次的u1和u2不再是String类了,而是User类,这时如果User类中没有重写equals方法,就会导致调用时调用Object类的equals()方法,而这个类的equals方法,两个对象之间是直接比较内存地址的,因此,这时的比较结果返回的是false。因此我们得出了一个结论:放在集合里面的元素,其类的equals()方法必须重写。
与contains()方法原理相同:remove()方法调用的也是equals()方法,因此运行下面的程序,会导致cc的size为0,也就是说通过s2对s1进行了删除的操作。
总结的重点:
10、list接口
11、ArrayList集合
12、linkedlist集合:
13、vector集合、
vector的初始化方法:List vector = new Vector();
vector因为效率比较低所以现在不常用,那么现在用什么方法来保证线程安全呢?如何将线程不安全的集合变成的线程安全的?
14、泛型,jdk5.0之后推出的新特性
为什么要使用泛型
分析以下程序会发现:如果集合中装入了集中不同类型的对象的内存地址,这时对集合进行遍历,并进行操作就会出现问题。这时需要对迭代器中取出的对象进行向下转型。
使用了泛型之后就会出现整个集合的元素被约束在某个范围内,这时调用迭代器的时候也是支持泛型的,则拿出的迭代器是指定的类型,只是迭代器不需要再从object类型转换为指定类型了,这就是泛型的好处。
泛型的特性总结:
好消息是jdk8之后引入了泛型自动推断机制,也就是说泛型的类型可以不用指定了,是有系统自动推断集合中的元素的类型。也就是说创建集合时引用的泛型类型不能省,但是后面的对象泛型类型可以省。
泛型的自定义
在类定义时写泛型的作用是提示我要用泛型,泛型写什么无所谓,方法后面也是这样的,但是对象定义的时候必须制定泛型的类型,这里的泛型类型就不是无所谓了。
15、增强for循环foreach()
语法格式是for(元素类型 变量名:数组或者集合)
三种关于集合的取出元素的循环方法:
16、hashset集合:
取出来的结果是无序的,且不重复的。
17、treeset集合:
18、hashset是set的类
19、treeset底层是map集合。