IT第二十一天 - Collections、ArrayList集合、LinkedList集合、Set集合、HashMap集合、集合的操作注意【修20130828】
NIIT第二十一天 |
||
上午 |
集合 |
1. 集合Collection存储数据的形式是单个存储的,而Map存储是按照键值对来存储的,键值对:即键+值同时存储的,类似align="center",align是键,center是值 |
ArrayList |
1. ArrayList类型的集合,在查询效率上非常的高,但是对于对数据的增删改,则效率很低 2.在使用集合存储数据时,在一个集合中应该尽量的存储相同数据类型的数据,这样可以在对数据进行查询时,提高查询效率 |
|
闲谈 |
1.只要对象继承自Iterable接口,则该对象就可以进行迭代,迭代即:对序列进行遍历并选择序列中的对象【引文】 2.在传入方法的参数是对象时,Object类型参数可能更灵活,但是Object参数无法访问到特定子类的特有方法或属性,因为父类时“看不到”子类中独有的方法或属性,而类在实现接口时,必定会实现接口中的方法,虽然接口也不能访问到实现类的独有的方法,但是接口中定义的所有抽象方法,实现类中必定会对其进行“重写”,因此传递到方法的参数是接口类型必定是实现类中具体实现的方法,而继承,子类不一定会重写父类的方法,因此,实际访问的就可能会是父类中的方法,所以,在灵活性等方面,接口参数的使用会优于父类Object参数类型,最起码,传入接口类型的参数是有目的的,而且,一定可以访问到实现类的方法,因为实现类需要对接口中所有的方法进行“重写” 3.泛型数据类型,在集合声明时的应用,避免了在想集合中存储数据时,传入其他类型的数据 4.关于变量声明时,数据类型的选择: (1)如果不需要限制变量的类型,并且不会当做参数传入方法中进行使用,可以写成具体的某种数据类型,如:集合ArrayList (2)如果该变量可能会传入方法进行使用,并且希望传入方法的参数更具灵活性,这时可以将变量的类型声明为【接口】的类型,这样只要是实现了该接口的实现类,都可以传入方法进行使用,并且所有抽象方法都已经被实现,如:集合可以写成List,在参数的具体类型方面就有可能是:ArrayList或LinkedList (3)在jdk的系统类中,大部分的实现类,都并没有多么的扩充接口中的方法数量,就是说,接口中的方法实现类都实现了,而实现类中并没有多少多余的特有的方法,因此方法的参数写成接口类型,可能更具灵活性 |
|
下午 |
ArrayList |
1.集合中如果存储的是对象数据类型,在进行对其元素进行比较时,有必要对equals()方法进行重写【示例代码】 2.集合ArrayList石非线程安全,但是执行的效率高,Vector是线程安全;线程安全:即:某一时刻有且只能有一个线程能够写Vector,即加锁,避免多线程同时写数据引起不一致性,为此也会消耗很多资源【引文】 |
LinkedList |
1.集合LinkedList对于数据的增删改,效率非常高,而查询的效率则很低,因为LinkedList对是以“链表”的形式存储数据的,因此,在增删改操作时,不需要大规模的变动的其他数据,只需要修改上下节点的指向就可以了 2.在对LinkedList集合的数据进行操作时,尽量的选用**first**或**last**的操作方法,执行的效率会更高 3.Collections对集合进行操作时,synchronizedList方法的使用,对数据进行包装,以防止数据被非线程安全访问 |
|
Set |
1.集合Set存储的数据是无序,并且所有存储的元素都不会重复,如果发现重复数据的写入,则会覆盖之前相同的数据 2.如果HashSet集合中存储的是对象,则对数据进行写入到集合时,要避免java系统错误的把“相同”的数据写入,则有必要重写hashCode方法和equals方法【示例代码】 |
|
Map |
1.HashMap存储的数据时,键值对的形式存储的 |
|
晚上 |
|
|
笔记 |
1.在对集合中的数据进行查询操作时,建议选用ArrayList类型的集合,查询效率非常高 2.在对集合中的数据进行增删改操作时,建议用LinkedList类型的集合,对于数据的更改效率非常高 3.如果对象继承Iterable接口,则该对象可进行迭代操作,即集合遍历并选择序列中的对象 4.在声明集合类型数据时,尽量加上泛型,即<E>,可以防止不同类型的数据的写入 5.在对集合中的对象类型的数据进行比较或插入(避免重复对象)时,有必要重写equals()方法, 6. ArrayList集合石非线程安全,但是操作效率高,而Vector集合则是线程安全,即同一时刻,有且只能有一个线程能操作数据;对ArrayList非线程安全数据操作时,可以使用Collections中的synchronizedList进行转换成线程安全,再进行操作 7. LinkedList集合在操作数据时,建议使用**first**或**last**放法对数据进行操作,利于链表结构的数据操作 9.Set集合中的元素不允许存在相同的元素(当然存储之前可能需要重写equals方法,待验证),因此可以利用此集合对“数据库”中的数据进行整理归类,在向set集合中写入数据时,有必要重写原来的hashCode方法和equals方法,来避免相同的对象被错误的写入 10.HashMap集合存储的是键值对类型的元素数据 11.对于方法参数的声明上,尽量的选用接口数据类型,可能会更具灵活性;相比于传入父类的数据类型,接口类型会更具针对性和灵活性 |