2014-10-12 每日一记

今天

(1)看了clone方法

首先要使用object的clone方法首先要实现Cloneable接口才行,也就是说得覆盖clone方法,单纯地仅仅调用super.clone(如下)只能实现浅复制,也就是说只做基本数据类型的拷贝,而对象还是共享的。

1   public Object clone(){
2         Object obj = null;
3         try{
4             obj = super.clone();
5         }catch(CloneNotSupportedException ex){
6             ex.printStackTrace();
7         }
8         return obj;
9     }

要实现深复制,需要在clone函数中处理对象变量

//如 DeepCopyClass类中的对象为Date对象
 public Object clone(){
        DeepCopyClass obj = null;
        try{
            obj = (DeepCopyClass)super.clone();
        }catch(CloneNotSupportedException e){
            e.printStackTrace();
        }
        obj.setObject((Date)this.getObject().clone());
        return obj;
    }

(2)动手写了写linkedlist类

  1 package mylinkedlist;
  2
  3 import java.util.ConcurrentModificationException;
  4 import java.util.Iterator;
  5 import java.util.NoSuchElementException;
  6
  7 public class MyLinkedList<E> implements Iterable<E>{
  8     private int size;
  9     private int modCount;
 10     private Node<E> header;
 11     private Node<E> tail;
 12
 13     private static class Node<E>{
 14         public E data;
 15         public Node<E> previous;
 16         public Node<E> next;
 17
 18         public Node(E d, Node<E> p,Node<E> n){
 19             this.next = n;
 20             this.previous=p;
 21             this.data=d;
 22         }
 23     }
 24     public MyLinkedList(){
 25         size=0;
 26         header = new Node<E>(null,null,null);
 27         tail =new Node<E>(null,header,null);
 28         header.next=tail;
 29         modCount++;//这里也要使modCount+1
 30     }
 31     public int size(){
 32         return size;
 33     }
 34     public boolean isEmpty(){
 35         return size==0;
 36     }
 37     public E get(int index){
 38         return getNode(index).data;
 39     }
 40     public E set(int index, E ele){
 41         Node<E> temp = getNode(index);
 42         E old = temp.data;
 43         temp.data = ele;
 44         return old;
 45     }
 46
 47     public void add(E element){
 48         add(size(),element);
 49     }
 50     public void add(int index, E element){
 51         Node<E> temp=getNode(index-1);
 52         Node<E> newEle= new Node<E>(element,temp,temp.next);
 53         temp.next=newEle;
 54         temp.next.previous=newEle;
 55         size++;
 56         modCount++;
 57     }
 58     //remove的方法这样写完全是为了让迭代器也能使用remove的方法,因为迭代器获取的不是要删除元素的具体位置而是要删除元素本身
 59     private E remove(Node<E> temp){
 60         temp.previous.next = temp.next;
 61         temp.next.previous=temp.previous;
 62         size--;
 63         modCount++;
 64         return  temp.data;
 65     }
 66     public E remove(int index){
 67         return remove(getNode(index));
 68     }
 69
 70
 71     private Node<E> getNode(int index){
 72         if(index<0|index>=size())
 73             throw new IndexOutOfBoundsException();
 74         Node<E> temp;
 75         if(size()/2>index){
 76             temp=header.next;
 77             for(int i=0;i<index;i++){
 78                 temp=temp.next;
 79             }
 80         }else{
 81             temp=tail.previous;
 82             for(int i=size();i>index;i--){
 83                 temp=temp.previous;
 84             }
 85         }
 86         return temp;
 87     }
 88     @Override
 89     public java.util.Iterator<E> iterator() {//你这个实现了Iterable的接口就要实现这个方法
 90         return new LinkedListIterator();
 91     }
 92
 93     private class LinkedListIterator implements Iterator<E>{
 94         private int expectedModCount=modCount;
 95         private Node<E> current=header.next;
 96         private boolean okToMove = false;
 97         @Override
 98         public boolean hasNext() {
 99             // TODO Auto-generated method stub
100             return current!=tail;
101         }
102
103         @Override
104         public E next() {
105             // TODO Auto-generated method stub
106             if(!hasNext())
107                 throw new NoSuchElementException();
108             if(expectedModCount!=modCount)
109                 throw new  ConcurrentModificationException();
110             E temp = current.data;
111             current=current.next;
112             okToMove=true;
113             return temp;
114         }
115
116         @Override
117         public void remove() {
118             // TODO Auto-generated method stub
119             if(expectedModCount!=modCount)
120                 throw new  ConcurrentModificationException();
121             if(!okToMove)
122                 throw new IllegalStateException();
123             MyLinkedList.this.remove(current.previous);
124             okToMove=false;
125             expectedModCount++;//调用了外部类的remove会在那里面将modCount++;
126
127         }
128
129     }
130
131 }
时间: 2024-07-30 13:33:08

2014-10-12 每日一记的相关文章

富士通南大笔试(2014.10.12)

哈希表 散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构.也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度.这个映射函数叫做散列函数,存放记录的数组叫做散列表. 给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash) 函数[1] 包含min,push,pop函数的栈,时间为O(1) #include

每日一记--2014.9.22

说好的每日一记呢, 哎,上周接到了老师的任务,要把项目中的后台数据处理代码读懂,于是就没有时间每天搞段小代码来写写了. 但是通过这一周,自己也学到了不少东西. 1. 首先是如何读别人写的代码: 先看 improt 大概用到什么类: 然后看main,有什么变量的初始化(有的写在一个init函数里了): 找到核心类,核心函数(调用了其他函数的函数),看其实现主要功能流程 . 最后再看其他那些被调用的函数,它们的具体实现细节. 2. 其次是如何给别人讲代码,做code review: 先讲其实现的功能

每日一记:搭建Memcached + php 缓存系统

服务器环境,Centos6.5 1.安装Memcached服务端 Yum -y install memcached 2.配置Memcached服务端用户以及自动启动服务等 将服务配置成自启动 chkconfig --level 2345 memcached on 3.配置配置文件 vi /etc/sysconfig/memcached PORT=”11211″ 端口  USER=”root” 使用的用户名  MAXCONN=”1024″ 同时最大连接数 CACHESIZE=”64″ 使用的内存大

关于做好成都2014年12月上全国专业技术人员计算机应用能力考试的安排

关于做好2014年12月上全国专业技术人员计算机应用能力 考试考务工作有关问题的通知 各区(市)县人力资源与社会保障局.市级各部门,中央驻蓉单位.各大院(校)人事处(科): 现将成都市2014年12月(上)专业技术人员计算机应用能力考试考务工作有关事项通知如下: 一.报名日期 报名日期:2014年11月15日至2014年12月5日. 缴费截止日期:2014年12月5日. 网上准考证打印日期:2014年12月10日至12月12日(逾期未打印者,视为自动放弃). 考试开始日期:2014年12月13日

项目管理者联盟PMP培训班招生简章(针对2014年12月考试)

PMP认证培训班招生简章(针对2014年12月考试) 主办单位:项目管理者联盟  开课城市:北京 开课时间:2014年10月12日 面向对象 各类科技与研发.IT软件与通信.工程与设计等项目导向型企业的各级管理人员与项目管理人员.项目经理与技术经理,有志于成长为项目经理的优秀工程师与技术骨干. 课程优势 l 十年美国项目管理学会全球教育合作伙伴(Global R.E.P. No. 3254),2003年开始PMP培训,课程质量业界认可,服务专业.专注. l 国内最强大的PMP专家团队.主讲老师具

phpStudy + JspStudy 2014.10.02 下载

phpStudy + JspStudy 2014.10.02 下载 目标:让天下没有难配的php环境. phpStudy Linux版&Win版同步上线 支持Apache/Nginx/Tengine/Lighttpd/IIS7/8/6 『软件简介』该程序包集成最新的Apache+Nginx+LightTPD+PHP+MySQL+phpMyAdmin+Zend Optimizer+Zend Loader,一次性安装,无须配置即可使用,是非常方便.好用的PHP调试环境.该程序绿色小巧简易迷你仅有32

2015微软创新杯Imaginecup大赛报名进行中(报名截止2014年12月31日23:59)

CSDN高校俱乐部与微软官方合作,2015微软创新杯大赛中国区官网落户CSDN高校俱乐部:http://student.csdn.net/mcs/imaginecup2015 在微软官方设置创新杯中国区奖项之外,CSDN高校俱乐部每个竞赛项目特设一等奖.二等奖.三等奖及纪念奖若干名. CSDN高校俱乐部特别奖(获奖者需在高校俱乐部进行过报名备案):详情-> 1. 一等奖(三支团队): 每个竞赛项目一等奖一名,每支团队获得奖金2,000元人民币,团队成员每人尊享2015 CSDN VIP年卡会员:

2014年12月

  2014年12月 2014年11月 2014年10月 2014年09月 2014年08月 2014年07月 2014年06月

2014年12月-前端开发月刊

一. JS: https://github.com/hacke2/hacke2.github.io/issues/11 霸天 月刊 1.基础知识: http://www.zhihu.com/question/20979831 有哪些经常被误用的 HTML.JavaScript.CSS 的元素.方法和属性 http://www.zhihu.com/question/19713563 如何循序渐进有效学习 JavaScript? http://www.zhihu.com/question/26920

翻译:Gregory Larsen,2016/02/19(第一版:2014年12月17日)高级T-SQL阶梯1级:使用CROSS JOIN介绍高级T-SQL

原文链接:http://www.sqlservercentral.com/articles/Stairway+Series/119933/ 原文作者:Gregory Larsen,2016/02/19(第一版:2014年12月17日) 系列 本文是"Stairway Series:Stairway to Advanced T-SQL"的一部分 这个阶梯将包含一系列文章,这些文章将在前面两个T-SQL阶梯,T-SQL DML和T-SQL超越基础知识的T-SQL基础上进行扩展. 这个楼梯应