这是我第一次写博客,学习java之路相经过写博客记录下来,若是描述有错误,请多多指导!java
1.1 集合的演变安全
早期java中只有3个集合类,分别为Vector类,Hashtable类和Stack类。这3个类提供了基本的集合功能,但并不使人彻底满意。该方案没有足够的灵活性让咱们实现多种状况的功能,全部方法都是同步方法,用于保证线程安全性,但这也形成了性能损失。多线程
但Java5后出现了另一个重大的变化,新增特性甚至改变了集合类的使用语法。ide
java5以前,集合中中没法直接添加基本类型值,例如,添加int值时必须先将其封装在相应Integer包装器的实例中。不过。自从java5引入名为 自动拆箱/装箱的特性,咱们并不须要手动封装在相应的Integer包装器的实例中,由IDE自动为咱们完成,咱们并不会看到该过程。性能
Map map=new HashMap(); //java1.5以前,添加int值必须先将其封装在相应的Integer包装器的实例中 map.put("one", new Integer(1)); //自动为咱们装箱 map.put("two", 1);
1.2 集合类与接口学习
添加到集合中的对象称为元素(element),一些集合类容许存在重复元素,而一些事不容许的。这里的重复是指用equals()方法比较2个元素,若是返回值为true,则重复,不然相反。spa
1.21 Collection线程
集合类层次结构的最顶端是Collection接口,大部分集合类实现常常用到该接口中的方法。orm
若是想访问集合元素,可经过iterator()方法访问,并指出该方法返回的对象实现了Iterator接口,也就是iterator()方法返回一个Iterator对象,使用该对象提供的方法咱们就能依次读取对象中的集合。
对象
List<Student> list=new ArrayList<Student>(); Student student1=new Student(); student1.setStuName("小瀚"); student1.setStuAge(20); Student student2=new Student(); student2.setStuName("小瀚"); student2.setStuAge(20); list.add(student1); list.add(student2); //获得当前Iterator对象 Iterator<Student> it=list.iterator(); //提示迭代器是否已经返回集合中全部对象的引用 while(it.hasNext()){ //返回指向集合中下一个对象的应用 Student stu=it.next(); System.out.println(stu.getStuName()+" "+stu.getStuAge()); }
1.22 List
集合类的其中一个特色是对集合中元素进行有意义的排序,List接口定义了这种排序,也就是说,若是使用List实现并检索元素的引用,那么返回元素的顺序是能够预订的,该顺序是是由元素在集合中的位置决定的,而且在添加元素的时候能够显示或隐式地指定元素位置。下面我使用以下代码来演示下
List<Student>stuList=new ArrayList<Student>(); stuList.add(new Student(123,"小瀚",22)); stuList.add(new Student(456,"小露",22));
代码中姓名为 小瀚 的对象占用列表的第一个位置,也就是索引0,而 小露 对象占用第二个位置,也就是说,若是没有显示指定元素的位置,则element插入到末尾。相反,若是咱们指定特定位置,能够写Demo试试看
List<Student> list=new ArrayList<Student>(); Student student1=new Student(); student1.setStuName("小瀚"); student1.setStuAge(20); Student student2=new Student(); student2.setStuName("小露"); student2.setStuAge(20); Student student3=new Student(); student3.setStuName("小miss"); student3.setStuAge(20); list.add(student1); list.add(student2); list.add(1,student3); //获得当前Iterator对象 Iterator<Student> it=list.iterator(); //提示迭代器是否已经返回集合中全部对象的引用 while(it.hasNext()){ //返回指向集合中下一个对象的应用 Student stu=it.next(); System.out.println(stu.getStuName()+" "+stu.getStuAge()); }
输出结果为:
小瀚 20
小miss 20
小露 20
list.add(1,student3);
该add()重载调用中,第一个参数表示该Student对象插入到列表中对应的索引1的位置,该位置原来由 小露 对象占用,执行这段代码后,新增的对象会插入到集合中的2个原有对象之间,所以 小露对象的索引变成了2。
还有另一个方法,set()方法,与add相似,不过set()方法使用来替换指定位置的当前对象。
List接口不但定义了带索引未知的add()方法,还包含按索引移除对象的remove()方法,以下代码
stuList.remove(0);
这样将移除索引位置0上的对象,也就是小瀚这个对象,移除集合的第一个元素,其余对象索引因为移位操做而向下移位。remove()方法内部原理应该是这样的吧,调用remove()方法会依次查找整个列表并将列表中的每个元素与传入该方法的对象相比较,若是List中包含的元素很少,或须要移除的element位置靠前,那么过程很快,可是,若是List较大或是比较靠后,那么须要屡次遍历和比较才能找到对应的对象,并移除掉。不仅是remove()方法是这样的,例如Collection接口中定义的contains()方法和indexOf()方法都有此限制。
1.23 ArrayList
ArrayList的一些特质,以下
(1)ArrayList中可以包含重复的元素
(2)ArrayList中可以添加空值
(3)ArrayList类不是固有线程安全,所以在建立多线程使用ArrayList时,须要自行负责同步对ArrayList的修改。
这是我学java的第一篇博客,不对的地方请多多指教!