ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>午夜精品久久久久久久99黑人,欧美一级艳片视频免费观看,av一本在线http://www.aygfsteel.com/silvermyth/category/55180.htmlzh-cnFri, 31 Mar 2017 06:09:08 GMTFri, 31 Mar 2017 06:09:08 GMT60Swing Worker应用举例http://www.aygfsteel.com/silvermyth/articles/353009.htmlGavin LiGavin LiSun, 26 Jun 2011 03:10:00 GMThttp://www.aygfsteel.com/silvermyth/articles/353009.htmlhttp://www.aygfsteel.com/silvermyth/comments/353009.htmlhttp://www.aygfsteel.com/silvermyth/articles/353009.html#Feedback0http://www.aygfsteel.com/silvermyth/comments/commentRss/353009.htmlhttp://www.aygfsteel.com/silvermyth/services/trackbacks/353009.html    1.耗时的操作(例如从数据库查询大量数据åQŒè¯»å–URI资源½{‰ï¼‰(j¨ª)一定不能运行在EDT(事äšg‹z‘֏‘¾U¿ç¨‹)上,否则ä¼?x¨¬)导致Swing用户界面失去响应ã€?br />    2.只能在EDT¾U¿ç¨‹ä¸Šå¯¹Swing Components˜q›è¡Œè®‰K—®ã€?br />    åŸÞZºŽä¸Šé¢ä¸¤ç‚¹åŽŸå› åQŒåœ¨ä¸€ä¸ªJava Swing½E‹åºä¸­ï¼Œè¦æƒ³ä½¿ç”¨æˆïL(f¨¥ng)•Œé¢å“åº”灵敏,臛_°‘应该有两个线½E‹ï¼›ä¸€ä¸ªçº¿½E‹ç”¨æ¥æ‰§è¡Œè€—时操作åQŒEDT¾U¿ç¨‹ç”¨æ¥æ‰§è¡Œæ‰€æœ‰ä¸ŽSwing Components的交互,例如更新文本åQŒé‡¾l˜å›¾å½¢ç­‰½{‰ã€‚è¿™ž®Þp¦æ±‚两个线½E‹ä¹‹é—´è¦ç›æ€º’通讯åQŒç»™½E‹åºçš„开发带来了(ji¨£n)不少的难度,Swing Worker的出çŽîC»Žæ ÒŽ(gu¨©)œ¬ä¸Šè§£å†³äº†(ji¨£n)˜q™ä¸ªé—®é¢˜åQŒä‹É½E‹åºå‘˜å¿«é€Ÿå¼€å‘反应灵敏的的Swing½E‹åºæˆäØ“(f¨´)可能。SwingWoker被设计应用在此种场景下,你有一个耗时操作需要运行在后台åQŒåœ¨è¯¥æ“ä½œå®Œæˆæˆ–部分完成æ—Óž¼Œä½ è¦åˆ©ç”¨æ“ä½œ˜q”回的结果去更新用户界面ã€?br />    è®©æˆ‘们假æƒÏx(ch¨®ng)œ‰˜q™æ ·ä¸€ä¸ªåº”用场景,我有一个保存联¾pÖMh的文ä»Óž¼Œæˆ‘éœ€è¦ä»Žä¸­è¯»å–åÆˆè§£æžå‡ºæ‰€æœ‰è”¾pÖMh的信息,òq¶åŠ(qi¨¢ng)时更新在一个JTable中;假设˜q™ä¸ªæ–‡äšg非常的大åQŒè§£æžå‡ºæ‰€æœ‰è”¾pÖMh的信息需要花费几分钟的时é—ß_(d¨¢)¼Œå¦‚果不能很好的协调这个ä“Q务和EDT¾U¿ç¨‹åQŒåˆ™å¾ˆæœ‰å¯èƒ½ä¼?x¨¬)造成用户在几分钟旉™—´é‡Œå¾—不到¾l“æžœåQŒè€ŒSwing界面处于无响应状态。在˜q™ç§æƒ…况下,SwingWorkerž®±æ˜¯ä¸€ä¸ªç»ä½³çš„选择。我们首先看一下SwingWorker的定义:(x¨¬)
    public abstract class SwingWorker<T,V> extends Object implements RunnableFuture<T>
昄¡„¶åQŒè¿™æ—¶ä¸€ä¸ªæŠ½è±¡çš„æ¨¡æ¿¾c»ï¼Œåœ¨åº”用的时候,我们需要ç‘ô承SwingWorkeròq¶å®žä¾‹åŒ–模板参数。那么,˜q™ä¸¤ä¸ªæ¨¡æ¿ç±»åž‹ç©¶ç«Ÿæ˜¯ä»€ä¹ˆæ„æ€å‘¢åQŒT参数代表的是你的耗时ä»ÕdŠ¡æ‰§è¡Œå®Œæˆæ—¶è¿”å›žçš„¾l“æžœ¾cÕdž‹åQŒV代表的是你的耗时ä»ÕdŠ¡éƒ¨åˆ†å®Œæˆæ—¶è¿”å›žçš„¾l“æžœ¾cÕdž‹ã€‚在我们的场景中åQŒå‡è®¾ä“Q务完成时我们需要一个List<BeanContact>(BeanContact是一个保存联¾pÖMh信息的JavaBean),每当从文件中解析å‡ÞZ¸€ä¸ªè”¾pÖMh信息æ—Óž¼Œæˆ‘们ä¼?x¨¬)æ–°å»ÞZ¸€ä¸ªBeanContactòq‰™œ€è¦æ›´æ–°åˆ°JTable中。那么我们的Tž®±æ˜¯List<BeanContact>,而Vž®±æ˜¯BeanContact,则应该定义如下的¾c»ï¼š(x¨¬)
     public class LoadContactsTask extends SwingWorker<List<BeanContact>, BeanContact> {
            

     @Override
    protected List<BeanContact> doInBackground() throws Exception {

        //To do the task and return the result
    }


     }
    ä»Žä¸Šé¢å¯ä»¥çœ‹åˆŽÍ¼Œæˆ‘们˜q˜å¿…™å»è¦†ç›–SwingWorkerçš„doInBackgroundæ–ÒŽ(gu¨©)³•åQŒè¯¥æ–ÒŽ(gu¨©)³•执行我们的耗时操作åQŒåƈ且返回模板实例化时的T¾cÕdž‹¾l“果。下面是具体的代码实玎ͼš(x¨¬)
     

    @Override
    protected List<BeanContact> doInBackground() throws Exception {
        BufferedReader reader = new BufferedReader(new FileReader("c:/contacts.cff"));
        String line = null;
        while ((line = reader.readLine()) != null) {
            String[] strContacts = line.split(",");
            BeanContact contact = new BeanContact();
            contact.setName(strContacts[0]);
            contact.setSex(strContacts[1]);
            contact.setPhone(strContacts[2]);
            contact.setEmail(strContacts[3]);

            lineCnt++;
            publish(contact);/*********/
           contacts.add(contact);
           
            Thread.sleep(100);
        }
        return contacts;
    }

     è¯¥æ–¹æ³•很½Ž€å•,ž®±æ˜¯ä»Žæ–‡ä»¶ä¸­è¯Õd–一个联¾pÖMhçš„è®°å½•åÆˆä¸”æ–°å»ÞZ¸€ä¸ªBeanContact实例æ·ÕdŠ åˆ°ç»“æžœé›†ä¸­ã€‚æˆ‘ä»¬éœ€è¦æ³¨æ„çš„æ˜¯å…¶ä¸­çš„publishæ–ÒŽ(gu¨©)³•åQŒè¯¥æ–ÒŽ(gu¨©)³•用来发布部分执行¾l“æžœåQŒæ¯è¯Õd–一个联¾pÖMh信息åQŒæˆ‘们就用该æ–ÒŽ(gu¨©)³•把新建的BeanContact发布出去。我们需要知道的是,在publish若干个结果后åQˆå¯èƒ½æ˜¯ä¸€ä¸ªæˆ–多个åQŒç”±SwingWorker¾cÕd®žçŽŽÍ¼‰(j¨ª)SwingWorker¾cȝš„processæ–ÒŽ(gu¨©)³•ä¼?x¨¬)被自动回调åQŒè€Œæˆ‘们可以在其中åŽÀL›´æ–°ç”¨æˆïL(f¨¥ng)•Œé¢ï¼ŒSwingWorker保证processæ–ÒŽ(gu¨©)³•中所有操作都˜qè¡Œåœ¨EDT¾U¿ç¨‹ä¸­ã€‚下面是我们的具体实玎ͼš(x¨¬)
    @Override
    protected void process(List<BeanContact> chunks) {
        if (progressHandle != null) {
            progressHandle.processInProgress(chunks, lineCnt * 100 / 10000);
        }
    }

    æˆ‘们的实çŽîC¸­åQŒprocess中会(x¨¬)调用IProgressHandleåQˆè‡ªå®šä¹‰çš„一个接口,用来更新用户界面åQŒè¯¦è§åŽé¢ä»£ç ï¼‰(j¨ª)çš„processInProgressæ–ÒŽ(gu¨©)³•来更新用æˆïL(f¨¥ng)•Œé¢ï¼Œå¤§å®¶ä¼?x¨¬)注意到processæ–ÒŽ(gu¨©)³•的参数是一个List<BeanContact>,ä¸ÞZ»€ä¹ˆä¸æ˜¯ä¸€ä¸ªBeanContact呢,½{”案ž®±æ˜¯æˆ‘们在上面讲˜q‡çš„åQŒæœ‰å¯èƒ½publish若干‹Æ¡åŽæ‰è°ƒç”¨processæ–ÒŽ(gu¨©)³•ã€?br />    ä¸Žæ­¤¾cÖM¼¼åQŒåœ¨doInBackground完成后,SwingWorkerä¼?x¨¬)自动调用doneæ–ÒŽ(gu¨©)³•åQŒä¸‹é¢æ˜¯æˆ‘们的实玎ͼš(x¨¬)
    @Override
    protected void done() {
        if (progressHandle != null) {
            progressHandle.processComplete(contacts);
        }
    }
    å®¢æˆ·ç«¯å¦‚何来使用用SwingWork呢,很简单,只需要新å»ÞZ¸€ä¸ªå®žä¾‹åƈ且调用它的executeæ–ÒŽ(gu¨©)³•卛_¯åQŒä»–ä¼?x¨¬)自动调用doInBackgroundæ–ÒŽ(gu¨©)³•来完成操作;以下是完整的代码实现åQ?br />    
    

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package swingworkertest;

/**
 *
 * @author Administrator
 */
public class BeanContact {
    private String name=null;
    private String sex=null;
    private String phone=null;
    private String email=null;

    /**
     * @return the name
     */
    public String getName() {
        return name;
    }

    /**
     * @param name the name to set
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * @return the sex
     */
    public String getSex() {
        return sex;
    }

    /**
     * @param sex the sex to set
     */
    public void setSex(String sex) {
        this.sex = sex;
    }

    /**
     * @return the phone
     */
    public String getPhone() {
        return phone;
    }

    /**
     * @param phone the phone to set
     */
    public void setPhone(String phone) {
        this.phone = phone;
    }

    /**
     * @return the email
     */
    public String getEmail() {
        return email;
    }

    /**
     * @param email the email to set
     */
    public void setEmail(String email) {
        this.email = email;
    }
   
}


/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * Contacts.java
 *
 * Created on 2011-6-25, 10:40:13
 */
package swingworkertest;

import javax.swing.JFileChooser;

/**
 *
 * @author Administrator
 */
public class Contacts extends javax.swing.JFrame {

    /** Creates new form Contacts */
    public Contacts() {
        initComponents();
        handle = new DefaultProgressHandle();
        handle.setTable(jTable1);
        handle.setProgressBar(jProgressBar1);
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                         
    private void initComponents() {

        jButton1 = new javax.swing.JButton();
        jTextField1 = new javax.swing.JTextField();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTable1 = new javax.swing.JTable();
        jButton2 = new javax.swing.JButton();
        jProgressBar1 = new javax.swing.JProgressBar();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jButton1.setText("‹¹è§ˆ");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jTextField1.setEditable(false);

        jTable1.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "姓名", "性别", "ç”?sh¨´)è¯?, "ç”?sh¨´)子邮äšg"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }
        });
        jScrollPane1.setViewportView(jTable1);

        jButton2.setText("加蝲联系äº?);
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 557, Short.MAX_VALUE)
                    .addComponent(jProgressBar1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 557, Short.MAX_VALUE)
                    .addComponent(jButton2, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 557, Short.MAX_VALUE)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, 97, Short.MAX_VALUE)
                        .addGap(18, 18, 18)
                        .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 442, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButton1)
                    .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jButton2)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jProgressBar1, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {jButton1, jButton2, jTextField1});

        pack();
    }// </editor-fold>                       

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                        

        ContactsFileFilter filter = new ContactsFileFilter();
       
        JFileChooser chooser = new JFileChooser();
        chooser.setFileFilter(filter);
        int returnVal = chooser.showOpenDialog(null);
        if(returnVal == JFileChooser.APPROVE_OPTION){
            jTextField1.setText(chooser.getSelectedFile().getAbsolutePath());
        }
    }                                       

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                        
        // TODO add your handling code here:
        LoadContactsTask task = new LoadContactsTask(jTextField1.getText());
        task.setProgressHandle(handle);
        task.execute();
    }                                       

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                Contacts contacts = new Contacts();
                contacts.setTitle("Contacts");;
                contacts.setVisible(true);
            }
        });
    }
    DefaultProgressHandle handle = null;
    // Variables declaration - do not modify                    
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JProgressBar jProgressBar1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTable jTable1;
    private javax.swing.JTextField jTextField1;
    // End of variables declaration                  
}


/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package swingworkertest;

import java.io.File;
import javax.swing.filechooser.FileFilter;

/**
 *
 * @author Administrator
 */
public class ContactsFileFilter extends FileFilter{

    public boolean accept(File pathname) {
        if(pathname.isDirectory()){
            return true;
        }else{
            return pathname.getName().endsWith(".cff");
        }
    }

    @Override
    public String getDescription() {
        return "Text Files";
    }
   
}


/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package swingworkertest;

import java.util.List;
import javax.swing.JProgressBar;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author Administrator
 */
public class DefaultProgressHandle implements IProgressHandle {

    private JTable table = null;
    private JProgressBar progressBar = null;

    public void processInProgress(List<BeanContact> contacts, int progress) {
        DefaultTableModel model = (DefaultTableModel) table.getModel();
        for (BeanContact contact : contacts) {
            String[] strArray = {contact.getName(), contact.getSex(), contact.getPhone(), contact.getEmail()};
            model.addRow(strArray);
        }
        progressBar.setValue(progress);
    }

    public void processComplete(List<BeanContact> contacts) {
        progressBar.setValue(progressBar.getMaximum());
    }

    /**
     * @param table the table to set
     */
    public void setTable(JTable table) {
        this.table = table;
    }

    /**
     * @param progressBar the progressBar to set
     */
    public void setProgressBar(JProgressBar progressBar) {
        this.progressBar = progressBar;
    }
}


/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package swingworkertest;

import java.util.List;

/**
 *
 * @author Administrator
 */
public interface IProgressHandle {
    public abstract void processInProgress(List<BeanContact> contacts,int progress);
    public abstract void processComplete(List<BeanContact> contacts);
}


/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package swingworkertest;

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
import javax.swing.SwingWorker;

/**
 *
 * @author Administrator
 */
public class LoadContactsTask extends SwingWorker<List<BeanContact>, BeanContact> {

    private String fileName = null;
    private IProgressHandle progressHandle = null;
    private List<BeanContact> contacts = null;
    private int lineCnt = 0;

    public LoadContactsTask(String fileName) {
        this.fileName = fileName;
        contacts = new ArrayList<BeanContact>();
    }

    @Override
    protected List<BeanContact> doInBackground() throws Exception {
        BufferedReader reader = new BufferedReader(new FileReader("c:/contacts.cff"));
        String line = null;
        while ((line = reader.readLine()) != null) {
            String[] strContacts = line.split(",");
            BeanContact contact = new BeanContact();
            contact.setName(strContacts[0]);
            contact.setSex(strContacts[1]);
            contact.setPhone(strContacts[2]);
            contact.setEmail(strContacts[3]);

            lineCnt++;
            publish(contact);
            contacts.add(contact);
           
            Thread.sleep(100);
        }
        return contacts;
    }

    /**
     * @param progressHandle the progressHandle to set
     */
    public void setProgressHandle(IProgressHandle progressHandle) {
        this.progressHandle = progressHandle;
    }

    @Override
    protected void process(List<BeanContact> chunks) {
        if (progressHandle != null) {
            progressHandle.processInProgress(chunks, lineCnt * 100 / 10000);
        }
    }

    @Override
    protected void done() {
        if (progressHandle != null) {
            progressHandle.processComplete(contacts);
        }
    }
}



]]>
Volatile的一¿Uç®€å•应ç”?/title><link>http://www.aygfsteel.com/silvermyth/articles/352316.html</link><dc:creator>Gavin Li</dc:creator><author>Gavin Li</author><pubDate>Tue, 14 Jun 2011 14:53:00 GMT</pubDate><guid>http://www.aygfsteel.com/silvermyth/articles/352316.html</guid><wfw:comment>http://www.aygfsteel.com/silvermyth/comments/352316.html</wfw:comment><comments>http://www.aygfsteel.com/silvermyth/articles/352316.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/silvermyth/comments/commentRss/352316.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/silvermyth/services/trackbacks/352316.html</trackback:ping><description><![CDATA[<span>  </span><div style="list-style: disc outside none; background-image: none; position: static; text-align: left; padding: 0px; line-height: normal; overflow: visible; text-transform: none; background-color: transparent; font-variant-ligatures: normal; font-variant-caps: normal; font-style: normal; text-indent: 0pt; background-attachment: scroll; display: block; font-family: "MS Shell Dlg"; background-position: 0% 0%; float: none; letter-spacing: normal; visibility: inherit; color: #000000; clear: none; font-size: 12px; text-decoration: none;"><span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium Tahoma; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><span style="list-style: disc none outside;background-image: none; border-bottom: #000000; position: static; text-align: left; border-left: #000000; padding-bottom: 0px; line-height: normal; overflow-x: visible; overflow-y: visible; text-transform: none; background-color: transparent; font-variant: normal; font-style: normal; text-indent: 0pt; padding-left: 0px; background-attachment: scroll; padding-right: 0px; display: inline; font-family: 'MS Shell Dlg'; background-position: 0% 0%; float: none; letter-spacing: normal; visibility: inherit; color: #000000; clear: none; font-size: 12px; border-top: #000000; border-right: #000000; text-decoration: none; padding-top: 0px"><font style="list-style: disc none outside;background-image: none; border-bottom: #0000ff; position: static; text-align: left; border-left: #0000ff; padding-bottom: 0px; line-height: normal; overflow-x: visible; overflow-y: visible; text-transform: none; background-color: transparent; font-variant: normal; font-style: normal; text-indent: 0pt; padding-left: 0px; background-attachment: scroll; padding-right: 0px; display: inline; font-family: 'MS Shell Dlg'; background-position: 0% 0%; float: none; letter-spacing: normal; visibility: inherit; color: #0000ff; clear: none; font-size: 12px; border-top: #0000ff; border-right: #0000ff; text-decoration: none; padding-top: 0px" color="#0000ff">   <span> æˆ‘们知道åQŒåœ¨Java中设¾|®å˜é‡å€¼çš„æ“ä½œåQŒé™¤äº?ji¨£n)longå’Œdouble¾cÕdž‹çš„变量外都是原子操作åQŒä¹Ÿž®±æ˜¯è¯ß_(d¨¢)¼Œå¯¹äºŽå˜é‡å€¼çš„½Ž€å•读写操作没有必要进行同步。这在JVM 1.2之前åQŒJava的内存模型实现æ€ÀL˜¯ä»Žä¸»å­˜è¯»å–变量,是不需要进行特别的注意的。而随着JVM的成熟和优化åQŒçŽ°åœ¨åœ¨å¤šçº¿½E‹çŽ¯å¢ƒä¸‹volatile关键字的使用变得非常重要。在当前的Java内存模型下,¾U¿ç¨‹å¯ä»¥æŠŠå˜é‡ä¿å­˜åœ¨æœ¬åœ°å†…å­˜åQˆæ¯”如机器的寄存器)(j¨ª)中,而不是直接在ä¸Õd­˜?sh¨´)¸­è¿›è¡Œè¯»å†™ã€‚è¿™ž®±å¯èƒ½é€ æˆä¸€ä¸ªçº¿½E‹åœ¨ä¸Õd­˜?sh¨´)¸­ä¿®æ”¹äº?ji¨£n)一个变量的å€û|¼Œè€Œå¦å¤–一个线½E‹è¿˜¾l§ç®‹(hu¨¤)使用它在寄存器中的变量值的拯‚´åQŒé€ æˆæ•°æ®çš„不一致。把变量声明为volatileåQˆä¸½E›_®šçš„)(j¨ª)åQŒè¿™ž®±æŒ‡½CºJVMåQŒè¿™ä¸ªå˜é‡æ˜¯ä¸ç¨³å®šçš„åQŒæ¯‹Æ¡ä‹É用它都到ä¸Õd­˜?sh¨´)¸­è¿›è¡Œè¯»å–。一般说来,多ä“Q务环境下各ä“Q务间å…׃ín的标志都应该加volatile修饰ã€?/span><br /><span>    åœ¨ä¸€äº›æƒ…况下åQŒä‹É用volatile可以辑ֈ°åŒæ­¥çš„目的,在某¿Uç¨‹åº¦ä¸Šç›¸å½“于synchronized关键字;ä¸ÞZ»€ä¹ˆè¯´æ˜¯ä¸€å®šç¨‹åº¦ä¸Šå‘¢ï¼Œ˜q™å°±è¦ä»Žsynchronized同步关键字说起了(ji¨£n)åQŒsynchronized在Java语言中可以实çŽîC¸¤ä¸ªåŠŸèƒ½ï¼Œäº’æ–¥æ€§å’Œå¯è§æ€§ã€‚äº’æ–¥æ€§æ˜¯æŒ‡ä“Q意时åˆÕdªèƒ½æœ‰ä¸€ä¸ªçº¿½E‹æŒæœ‰ç‰¹å®šçš„锁,从而可以实现对å…׃ín数据的协调访问;而可见性说的是åQŒä“Q意线½E‹ä¿®æ”¹çš„å…׃ín数据对于其他¾U¿ç¨‹å¿…须是可见的åQŒä¹Ÿž®±æ˜¯è¯´ä¸å…è®¸å…¶ä»–¾U¿ç¨‹æ‹¿åˆ°æ—§çš„æ•°æ®ã€‚而volatile关键字只能实现可见性,也就是说用volatile修饰的变量的修改对于其他¾U¿ç¨‹æ˜¯å¯è§çš„åQŒå¦‚æžœè¯¥å€ÆD¢«ä¿®æ”¹åQŒå…¶ä»–线½E‹å¯ä»¥ç«‹å›_¾—到新倹{€‚下面的代码½Ž€å•展½CÞZº†(ji¨£n)volatile的一个简单应用,¾U¿ç¨‹çš„退出:(x¨¬)</span><br />     <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span> 1</span><img id="Codehighlighter1_41_463_Open_Image" onclick="this.style.display='none'; Codehighlighter1_41_463_Open_Text.style.display='none'; Codehighlighter1_41_463_Closed_Image.style.display='inline'; Codehighlighter1_41_463_Closed_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_41_463_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_41_463_Closed_Text.style.display='none'; Codehighlighter1_41_463_Open_Image.style.display='inline'; Codehighlighter1_41_463_Open_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif"><span>public</span><span style="color: #000000"> </span><span>class</span><span> Monitor </span><span>implements</span><span> Runnable </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_41_463_Closed_Text"><img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_41_463_Open_Text"><span>{<br /></span><span> 2</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" alt="" /><br /></span><span> 3</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" alt="" />    </span><span>private</span><span style="color: #000000"> </span><span>volatile</span><span> Thread blinker;<br /></span><span> 4</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" alt="" />    </span><span>boolean</span><span> isRunning </span><span>=</span><span style="color: #000000"> </span><span>false</span><span>;<br /></span><span> 5</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" alt="" /><br /></span><span> 6</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" alt="" /><br /></span><span> 7</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" alt="" /></span><span>    @Override<br /></span><span> 8</span><span style="color: #000000"><img id="Codehighlighter1_138_325_Open_Image" onclick="this.style.display='none'; Codehighlighter1_138_325_Open_Text.style.display='none'; Codehighlighter1_138_325_Closed_Image.style.display='inline'; Codehighlighter1_138_325_Closed_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_138_325_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_138_325_Closed_Text.style.display='none'; Codehighlighter1_138_325_Open_Image.style.display='inline'; Codehighlighter1_138_325_Open_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif">    </span><span>public</span><span style="color: #000000"> </span><span>void</span><span> run() </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_138_325_Closed_Text"><img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_138_325_Open_Text"><span>{<br /></span><span> 9</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" alt="" /><br /></span><span>10</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" alt="" /></span><span>        Thread thisThread </span><span>=</span><span> Thread.currentThread();<br /></span><span>11</span><span style="color: #000000"><img id="Codehighlighter1_219_321_Open_Image" onclick="this.style.display='none'; Codehighlighter1_219_321_Open_Text.style.display='none'; Codehighlighter1_219_321_Closed_Image.style.display='inline'; Codehighlighter1_219_321_Closed_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_219_321_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_219_321_Closed_Text.style.display='none'; Codehighlighter1_219_321_Open_Image.style.display='inline'; Codehighlighter1_219_321_Open_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif">        </span><span>while</span><span> (blinker </span><span>==</span><span> thisThread) </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_219_321_Closed_Text"><img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_219_321_Open_Text"><span>{<br /></span><span>12</span><span style="color: #000000"><img id="Codehighlighter1_228_259_Open_Image" onclick="this.style.display='none'; Codehighlighter1_228_259_Open_Text.style.display='none'; Codehighlighter1_228_259_Closed_Image.style.display='inline'; Codehighlighter1_228_259_Closed_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_228_259_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_228_259_Closed_Text.style.display='none'; Codehighlighter1_228_259_Open_Image.style.display='inline'; Codehighlighter1_228_259_Open_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif">            </span><span>try</span><span style="color: #000000"> </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_228_259_Closed_Text"><img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_228_259_Open_Text"><span>{<br /></span><span>13</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" alt="" /></span><span>                thisThread.sleep(</span><span>50</span><span>);<br /></span><span>14</span><span style="color: #000000"><img id="Codehighlighter1_292_297_Open_Image" onclick="this.style.display='none'; Codehighlighter1_292_297_Open_Text.style.display='none'; Codehighlighter1_292_297_Closed_Image.style.display='inline'; Codehighlighter1_292_297_Closed_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_292_297_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_292_297_Closed_Text.style.display='none'; Codehighlighter1_292_297_Open_Image.style.display='inline'; Codehighlighter1_292_297_Open_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif"></span><span>            }</span></span><span style="color: #000000"> </span><span>catch</span><span> (InterruptedException e) </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_292_297_Closed_Text"><img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_292_297_Open_Text"><span>{<br /></span><span>15</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" alt="" /></span><span>            }</span></span><span style="color: #000000"><br /></span><span>16</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" alt="" />            </span><span>//</span><span>To do you task</span><span style="color: #008000"><br /></span><span>17</span><span style="color: #008000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" alt="" /></span><span>        }</span></span><span style="color: #000000"><br /></span><span>18</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" alt="" /><br /></span><span>19</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" alt="" /></span><span>    }</span></span><span style="color: #000000"><br /></span><span>20</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" alt="" /><br /></span><span>21</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" alt="" /><br /></span><span>22</span><span style="color: #000000"><img id="Codehighlighter1_357_409_Open_Image" onclick="this.style.display='none'; Codehighlighter1_357_409_Open_Text.style.display='none'; Codehighlighter1_357_409_Closed_Image.style.display='inline'; Codehighlighter1_357_409_Closed_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_357_409_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_357_409_Closed_Text.style.display='none'; Codehighlighter1_357_409_Open_Image.style.display='inline'; Codehighlighter1_357_409_Open_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif">    </span><span>public</span><span style="color: #000000"> </span><span>void</span><span> startMonitor() </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_357_409_Closed_Text"><img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_357_409_Open_Text"><span>{<br /></span><span>23</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" alt="" /></span><span>        blinker </span><span>=</span><span style="color: #000000"> </span><span>new</span><span> Thread(</span><span>this</span><span>);<br /></span><span>24</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" alt="" /></span><span>        blinker.start();<br /></span><span>25</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" alt="" /></span><span>    }</span></span><span style="color: #000000"><br /></span><span>26</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" alt="" /><br /></span><span>27</span><span style="color: #000000"><img id="Codehighlighter1_439_460_Open_Image" onclick="this.style.display='none'; Codehighlighter1_439_460_Open_Text.style.display='none'; Codehighlighter1_439_460_Closed_Image.style.display='inline'; Codehighlighter1_439_460_Closed_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_439_460_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_439_460_Closed_Text.style.display='none'; Codehighlighter1_439_460_Open_Image.style.display='inline'; Codehighlighter1_439_460_Open_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif">    </span><span>public</span><span style="color: #000000"> </span><span>void</span><span> stopMonitor() </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_439_460_Closed_Text"><img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_439_460_Open_Text"><span>{<br /></span><span>28</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" alt="" /></span><span>        blinker </span><span>=</span><span style="color: #000000"> </span><span>null</span><span>;<br /></span><span>29</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" alt="" /></span><span>    }</span></span><span style="color: #000000"><br /></span><span>30</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" alt="" /><br /></span><span>31</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockEnd.gif" alt="" /></span><span>}</span></span></div><br /><br /><br /><br /><br /></font></span></span></div> <div style="list-style: disc outside none; background-image: none; position: static; text-align: left; padding: 0px; line-height: normal; overflow: visible; text-transform: none; background-color: transparent; font-variant-ligatures: normal; font-variant-caps: normal; font-style: normal; text-indent: 0pt; background-attachment: scroll; display: block; font-family: "MS Shell Dlg"; background-position: 0% 0%; float: none; letter-spacing: normal; visibility: inherit; color: #000000; clear: none; font-size: 12px; text-decoration: none;"><font face="Verdana"></font> </div><img src ="http://www.aygfsteel.com/silvermyth/aggbug/352316.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/silvermyth/" target="_blank">Gavin Li</a> 2011-06-14 22:53 <a href="http://www.aygfsteel.com/silvermyth/articles/352316.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java中List的安全删é™?/title><link>http://www.aygfsteel.com/silvermyth/articles/351944.html</link><dc:creator>Gavin Li</dc:creator><author>Gavin Li</author><pubDate>Wed, 08 Jun 2011 15:28:00 GMT</pubDate><guid>http://www.aygfsteel.com/silvermyth/articles/351944.html</guid><wfw:comment>http://www.aygfsteel.com/silvermyth/comments/351944.html</wfw:comment><comments>http://www.aygfsteel.com/silvermyth/articles/351944.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/silvermyth/comments/commentRss/351944.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/silvermyth/services/trackbacks/351944.html</trackback:ping><description><![CDATA[    å¯¹äºŽJava集合中的List来讲åQŒåˆ é™¤æ˜¯ä¸€ä¸ªå¸¸è§çš„æ“ä½œåQŒä½†æ˜¯ä¹Ÿæ˜¯æœ€å®ÒŽ(gu¨©)˜“犯错误的地方,ž®¤å…¶å¯¹äºŽæ–°æ‰‹æ›´æ˜¯å¦‚此。笔者在工作中也¾lå¸¸çœ‹åˆ°ä¸€äº›å·¥ä½œäº†(ji¨£n)很长旉™—´çš„老程序员在这个问题ä(sh¨´)¸ŠçŠ¯é”™è¯¯ï¼›åœ¨è¿™é‡Œï¼Œæˆ‘å°†é€šè¿‡ä¸€ä¸ªä¾‹å­ï¼Œ¾l™å¤§å®¶å±•½Cºå¦‚何从List中安全的删除元素。先看下面的例子åQ?br />    å‡å¦‚我有一个List,其中包含äº?个元素,我想删除其中的前é?个,应该如何做;好多½E‹åºå‘˜ä(sh¨´)¸åŠ æ€çƒ¦(ch¨³)åQŒå†™ä¸‹äº†(ji¨£n)下面的代码:(x¨¬)<br />     <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080"> 1</span><img id="Codehighlighter1_47_200_Open_Image" onclick="this.style.display='none'; Codehighlighter1_47_200_Open_Text.style.display='none'; Codehighlighter1_47_200_Closed_Image.style.display='inline'; Codehighlighter1_47_200_Closed_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_47_200_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_47_200_Closed_Text.style.display='none'; Codehighlighter1_47_200_Open_Image.style.display='inline'; Codehighlighter1_47_200_Open_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif"><span style="color: #0000ff">private</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> unSafeDeleteTopByCount(List list) </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_47_200_Closed_Text"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_47_200_Open_Text"><span style="color: #000000">{<br /></span><span style="color: #008080"> 2</span><span style="color: #000000"><img id="Codehighlighter1_55_121_Open_Image" onclick="this.style.display='none'; Codehighlighter1_55_121_Open_Text.style.display='none'; Codehighlighter1_55_121_Closed_Image.style.display='inline'; Codehighlighter1_55_121_Closed_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_55_121_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_55_121_Closed_Text.style.display='none'; Codehighlighter1_55_121_Open_Image.style.display='inline'; Codehighlighter1_55_121_Open_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif">        </span><span style="color: #0000ff">try</span><span style="color: #000000"> </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_55_121_Closed_Text"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_55_121_Open_Text"><span style="color: #000000">{<br /></span><span style="color: #008080"> 3</span><span style="color: #000000"><img id="Codehighlighter1_92_117_Open_Image" onclick="this.style.display='none'; Codehighlighter1_92_117_Open_Text.style.display='none'; Codehighlighter1_92_117_Closed_Image.style.display='inline'; Codehighlighter1_92_117_Closed_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_92_117_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_92_117_Closed_Text.style.display='none'; Codehighlighter1_92_117_Open_Image.style.display='inline'; Codehighlighter1_92_117_Open_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif">            </span><span style="color: #0000ff">for</span><span style="color: #000000"> (</span><span style="color: #0000ff">int</span><span style="color: #000000"> i </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">; i </span><span style="color: #000000"><</span><span style="color: #000000"> 4; i</span><span style="color: #000000">++</span><span style="color: #000000">) </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_92_117_Closed_Text"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_92_117_Open_Text"><span style="color: #000000">{<br /></span><span style="color: #008080"> 4</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />                list.remove(i);<br /></span><span style="color: #008080"> 5</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />            }</span></span><span style="color: #000000"><br /></span><span style="color: #008080"> 6</span><span style="color: #000000"><img id="Codehighlighter1_143_171_Open_Image" onclick="this.style.display='none'; Codehighlighter1_143_171_Open_Text.style.display='none'; Codehighlighter1_143_171_Closed_Image.style.display='inline'; Codehighlighter1_143_171_Closed_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_143_171_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_143_171_Closed_Text.style.display='none'; Codehighlighter1_143_171_Open_Image.style.display='inline'; Codehighlighter1_143_171_Open_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif">        }</span></span><span style="color: #000000"> </span><span style="color: #0000ff">catch</span><span style="color: #000000"> (Exception e) </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_143_171_Closed_Text"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_143_171_Open_Text"><span style="color: #000000">{<br /></span><span style="color: #008080"> 7</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />            e.printStackTrace();<br /></span><span style="color: #008080"> 8</span><span style="color: #000000"><img id="Codehighlighter1_181_197_Open_Image" onclick="this.style.display='none'; Codehighlighter1_181_197_Open_Text.style.display='none'; Codehighlighter1_181_197_Closed_Image.style.display='inline'; Codehighlighter1_181_197_Closed_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_181_197_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_181_197_Closed_Text.style.display='none'; Codehighlighter1_181_197_Open_Image.style.display='inline'; Codehighlighter1_181_197_Open_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif">        }</span></span><span style="color: #000000"> </span></span></div>    å¤§å®¶å¯ä»¥æ–°å¾ä¸€ä¸ªList,然后新徏一个类在main中调用一下这个方法,看看¾l“æžœä¼?x¨¬)如何ï¼?x¨¬)看到äº?ji¨£n)å?span style="color: red">åQŒç¨‹åºæŠ›å‡ÞZº†(ji¨£n)异常åQŒå¦‚下:(x¨¬)</span><br /><span style="color: red">    java.lang.IndexOutOfBoundsException: Index: 3, Size: 3</span><br /><span style="color: red"> at java.util.ArrayList.RangeCheck(Unknown Source)</span><br /><span style="color: red"> at java.util.ArrayList.remove(Unknown Source)</span><br /><span style="color: red"> at com.lpx.collection.TestArrayDeletion.unSafeDeleteTopByCount(TestArrayDeletion.java:59)</span><br /><span style="color: red"> at com.lpx.collection.TestArrayDeletion.main(TestArrayDel</span>etion.java:26)<br />    çœ‹åˆ°˜q™é‡ŒåQŒå¯èƒ½å¤§å®¶å·²¾læ˜Žç™½äº†(ji¨£n)åQ›å¯¹äº?ji¨£n),在删除的˜q‡ç¨‹ä¸­ï¼ŒListçš„size发生äº?ji¨£n)变化,但是index没有变化åQŒå°±ä¼?x¨¬)造成index>=size的情况发生,抛出IndexOutOfBoundsException是一定的。这˜q˜ç®—好的åQŒè‡³ž®‘你知道有异常,但是˜q˜æœ‰ä¸€¿Uæ›´éšè”½çš„æƒ…况,如果你删除的个数æ˜?个,IndexOutOfBoundsException是不ä¼?x¨¬)发生的åQŒä½†æ˜¯åˆ é™¤åŽçš„List不是你想要的¾l“果。具体是 <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img id="Codehighlighter1_47_200_Open_Image" onclick="this.style.display='none'; Codehighlighter1_47_200_Open_Text.style.display='none'; Codehighlighter1_47_200_Closed_Image.style.display='inline'; Codehighlighter1_47_200_Closed_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_47_200_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_47_200_Closed_Text.style.display='none'; Codehighlighter1_47_200_Open_Image.style.display='inline'; Codehighlighter1_47_200_Open_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif"><span style="color: #0000ff">private</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> unSafeDeleteTopByCount(</span><span style="color: #0000ff">int</span><span style="color: #000000"> count) </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_47_200_Closed_Text"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_47_200_Open_Text"><span style="color: #000000">{<br /><img id="Codehighlighter1_55_121_Open_Image" onclick="this.style.display='none'; Codehighlighter1_55_121_Open_Text.style.display='none'; Codehighlighter1_55_121_Closed_Image.style.display='inline'; Codehighlighter1_55_121_Closed_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_55_121_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_55_121_Closed_Text.style.display='none'; Codehighlighter1_55_121_Open_Image.style.display='inline'; Codehighlighter1_55_121_Open_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif">        </span><span style="color: #0000ff">try</span><span style="color: #000000"> </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_55_121_Closed_Text"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_55_121_Open_Text"><span style="color: #000000">{<br /><img id="Codehighlighter1_92_117_Open_Image" onclick="this.style.display='none'; Codehighlighter1_92_117_Open_Text.style.display='none'; Codehighlighter1_92_117_Closed_Image.style.display='inline'; Codehighlighter1_92_117_Closed_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_92_117_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_92_117_Closed_Text.style.display='none'; Codehighlighter1_92_117_Open_Image.style.display='inline'; Codehighlighter1_92_117_Open_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif">            </span><span style="color: #0000ff">for</span><span style="color: #000000"> (</span><span style="color: #0000ff">int</span><span style="color: #000000"> i </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">; i </span><span style="color: #000000"><</span><span style="color: #000000"> count; i</span><span style="color: #000000">++</span><span style="color: #000000">) </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_92_117_Closed_Text"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_92_117_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />                list.remove(i);<br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />            }</span></span><span style="color: #000000"><br /><img id="Codehighlighter1_143_171_Open_Image" onclick="this.style.display='none'; Codehighlighter1_143_171_Open_Text.style.display='none'; Codehighlighter1_143_171_Closed_Image.style.display='inline'; Codehighlighter1_143_171_Closed_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_143_171_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_143_171_Closed_Text.style.display='none'; Codehighlighter1_143_171_Open_Image.style.display='inline'; Codehighlighter1_143_171_Open_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif">        }</span></span><span style="color: #000000"> </span><span style="color: #0000ff">catch</span><span style="color: #000000"> (Exception e) </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_143_171_Closed_Text"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_143_171_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />            e.printStackTrace();<br /><img id="Codehighlighter1_181_197_Open_Image" onclick="this.style.display='none'; Codehighlighter1_181_197_Open_Text.style.display='none'; Codehighlighter1_181_197_Closed_Image.style.display='inline'; Codehighlighter1_181_197_Closed_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_181_197_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_181_197_Closed_Text.style.display='none'; Codehighlighter1_181_197_Open_Image.style.display='inline'; Codehighlighter1_181_197_Open_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif">        }</span></span><span style="color: #000000"> </span><span style="color: #0000ff">finally</span><span style="color: #000000"> </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_181_197_Closed_Text"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_181_197_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />            print();<br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />        }</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockEnd.gif" />    }</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /><br /><img id="Codehighlighter1_224_287_Open_Image" onclick="this.style.display='none'; Codehighlighter1_224_287_Open_Text.style.display='none'; Codehighlighter1_224_287_Closed_Image.style.display='inline'; Codehighlighter1_224_287_Closed_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_224_287_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_224_287_Closed_Text.style.display='none'; Codehighlighter1_224_287_Open_Image.style.display='inline'; Codehighlighter1_224_287_Open_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="color: #0000ff">private</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> print() </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_224_287_Closed_Text"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_224_287_Open_Text"><span style="color: #000000">{<br /><img id="Codehighlighter1_252_284_Open_Image" onclick="this.style.display='none'; Codehighlighter1_252_284_Open_Text.style.display='none'; Codehighlighter1_252_284_Closed_Image.style.display='inline'; Codehighlighter1_252_284_Closed_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_252_284_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_252_284_Closed_Text.style.display='none'; Codehighlighter1_252_284_Open_Image.style.display='inline'; Codehighlighter1_252_284_Open_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif">        </span><span style="color: #0000ff">for</span><span style="color: #000000"> (String str : list) </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_252_284_Closed_Text"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_252_284_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />            System.out.println(str);<br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />        }</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockEnd.gif" />    }</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /><br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />List</span><span style="color: #000000"><</span><span style="color: #000000">String</span><span style="color: #000000">></span><span style="color: #000000"> list </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> ArrayList</span><span style="color: #000000"><</span><span style="color: #000000">String</span><span style="color: #000000">></span><span style="color: #000000">();<br /><img id="Codehighlighter1_355_383_Open_Image" onclick="this.style.display='none'; Codehighlighter1_355_383_Open_Text.style.display='none'; Codehighlighter1_355_383_Closed_Image.style.display='inline'; Codehighlighter1_355_383_Closed_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_355_383_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_355_383_Closed_Text.style.display='none'; Codehighlighter1_355_383_Open_Image.style.display='inline'; Codehighlighter1_355_383_Open_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000"> i</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">;i</span><span style="color: #000000"><</span><span style="color: #000000">6</span><span style="color: #000000">;i</span><span style="color: #000000">++</span><span style="color: #000000">)</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_355_383_Closed_Text"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_355_383_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />       list.add(</span><span style="color: #000000">"</span><span style="color: #000000">str</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">i);<br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />unSafeDeleteTopByCount(</span><span style="color: #000000">3</span><span style="color: #000000">);</span></div>   ä»€ä¹ˆæ„æ€å‘¢åQŒå¤§å®¶å¯ä»¥çœ‹ä¸€ä¸‹ä¸Šé¢çš„代码åQŒå¦‚果运行的话,打印出的¾l“果是:(x¨¬)<br />    str1<br />    str3<br />    str5<br />   ä¸ÞZ»€ä¹ˆå‘¢åQŒå½“我们删除äº?ji¨£n)indexä¸?的元素【str0】后åQŒç”±äºŽListçš„size变化åQŒindexä¸?的元素会(x¨¬)变ä(sh¨´)Ø“(f¨´)str1,而indexä¸?的元素会(x¨¬)变ä(sh¨´)Ø“(f¨´)str2,˜q™æ—¶ç”? <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img id="Codehighlighter1_54_205_Open_Image" onclick="this.style.display='none'; Codehighlighter1_54_205_Open_Text.style.display='none'; Codehighlighter1_54_205_Closed_Image.style.display='inline'; Codehighlighter1_54_205_Closed_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_54_205_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_54_205_Closed_Text.style.display='none'; Codehighlighter1_54_205_Open_Image.style.display='inline'; Codehighlighter1_54_205_Open_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif"><span style="color: #0000ff">private</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> safeDeletionTopByCountMethod1(</span><span style="color: #0000ff">int</span><span style="color: #000000"> count) </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_54_205_Closed_Text"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_54_205_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />        System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">*********safeDeletionTopByCountMethod1*********</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><img id="Codehighlighter1_168_191_Open_Image" onclick="this.style.display='none'; Codehighlighter1_168_191_Open_Text.style.display='none'; Codehighlighter1_168_191_Closed_Image.style.display='inline'; Codehighlighter1_168_191_Closed_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_168_191_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_168_191_Closed_Text.style.display='none'; Codehighlighter1_168_191_Open_Image.style.display='inline'; Codehighlighter1_168_191_Open_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif">        </span><span style="color: #0000ff">for</span><span style="color: #000000"> (</span><span style="color: #0000ff">int</span><span style="color: #000000"> i </span><span style="color: #000000">=</span><span style="color: #000000"> count </span><span style="color: #000000">-</span><span style="color: #000000"> </span><span style="color: #000000">1</span><span style="color: #000000">; i </span><span style="color: #000000">>=</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">; i</span><span style="color: #000000">--</span><span style="color: #000000">) </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_168_191_Closed_Text"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_168_191_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />            list.remove(i);<br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />        }</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />        print();<br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockEnd.gif" />    }</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /><br /><img id="Codehighlighter1_263_409_Open_Image" onclick="this.style.display='none'; Codehighlighter1_263_409_Open_Text.style.display='none'; Codehighlighter1_263_409_Closed_Image.style.display='inline'; Codehighlighter1_263_409_Closed_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_263_409_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_263_409_Closed_Text.style.display='none'; Codehighlighter1_263_409_Open_Image.style.display='inline'; Codehighlighter1_263_409_Open_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif">    </span><span style="color: #0000ff">private</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> safeDeletionTopByCountMethod2(</span><span style="color: #0000ff">int</span><span style="color: #000000"> count) </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_263_409_Closed_Text"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_263_409_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />        System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">*********safeDeletionTopByCountMethod2*********</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><img id="Codehighlighter1_372_395_Open_Image" onclick="this.style.display='none'; Codehighlighter1_372_395_Open_Text.style.display='none'; Codehighlighter1_372_395_Closed_Image.style.display='inline'; Codehighlighter1_372_395_Closed_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_372_395_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_372_395_Closed_Text.style.display='none'; Codehighlighter1_372_395_Open_Image.style.display='inline'; Codehighlighter1_372_395_Open_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif">        </span><span style="color: #0000ff">for</span><span style="color: #000000"> (</span><span style="color: #0000ff">int</span><span style="color: #000000"> i </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">; i </span><span style="color: #000000"><</span><span style="color: #000000"> count; i</span><span style="color: #000000">++</span><span style="color: #000000">) </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_372_395_Closed_Text"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_372_395_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />            list.remove(</span><span style="color: #000000">0</span><span style="color: #000000">);<br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />        }</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />        print();<br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockEnd.gif" />    }</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /><br /><img id="Codehighlighter1_467_706_Open_Image" onclick="this.style.display='none'; Codehighlighter1_467_706_Open_Text.style.display='none'; Codehighlighter1_467_706_Closed_Image.style.display='inline'; Codehighlighter1_467_706_Closed_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_467_706_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_467_706_Closed_Text.style.display='none'; Codehighlighter1_467_706_Open_Image.style.display='inline'; Codehighlighter1_467_706_Open_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif">    </span><span style="color: #0000ff">private</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> safeDeletionTopByCountMethod3(</span><span style="color: #0000ff">int</span><span style="color: #000000"> count) </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_467_706_Closed_Text"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_467_706_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />        System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">*********safeDeletionTopByCountMethod3*********</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />        List</span><span style="color: #000000"><</span><span style="color: #000000">String</span><span style="color: #000000">></span><span style="color: #000000"> localList </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> ArrayList</span><span style="color: #000000"><</span><span style="color: #000000">String</span><span style="color: #000000">></span><span style="color: #000000">();<br /><img id="Codehighlighter1_628_663_Open_Image" onclick="this.style.display='none'; Codehighlighter1_628_663_Open_Text.style.display='none'; Codehighlighter1_628_663_Closed_Image.style.display='inline'; Codehighlighter1_628_663_Closed_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_628_663_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_628_663_Closed_Text.style.display='none'; Codehighlighter1_628_663_Open_Image.style.display='inline'; Codehighlighter1_628_663_Open_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif">        </span><span style="color: #0000ff">for</span><span style="color: #000000"> (</span><span style="color: #0000ff">int</span><span style="color: #000000"> i </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">; i </span><span style="color: #000000"><</span><span style="color: #000000"> count; i</span><span style="color: #000000">++</span><span style="color: #000000">) </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_628_663_Closed_Text"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_628_663_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />            localList.add(list.get(i));<br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />        }</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />        list.removeAll(localList);<br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />        print();<br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockEnd.gif" />    }</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /><br /><img id="Codehighlighter1_764_1024_Open_Image" onclick="this.style.display='none'; Codehighlighter1_764_1024_Open_Text.style.display='none'; Codehighlighter1_764_1024_Closed_Image.style.display='inline'; Codehighlighter1_764_1024_Closed_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_764_1024_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_764_1024_Closed_Text.style.display='none'; Codehighlighter1_764_1024_Open_Image.style.display='inline'; Codehighlighter1_764_1024_Open_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif">    </span><span style="color: #0000ff">private</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> safeDeletionTopByCountMethod4(</span><span style="color: #0000ff">int</span><span style="color: #000000"> count) </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_764_1024_Closed_Text"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_764_1024_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />        System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">*********safeDeletionTopByCountMethod4*********</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />        List</span><span style="color: #000000"><</span><span style="color: #000000">String</span><span style="color: #000000">></span><span style="color: #000000"> localList </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> ArrayList</span><span style="color: #000000"><</span><span style="color: #000000">String</span><span style="color: #000000">></span><span style="color: #000000">();<br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />        localList.addAll(list);<br /><img id="Codehighlighter1_951_1010_Open_Image" onclick="this.style.display='none'; Codehighlighter1_951_1010_Open_Text.style.display='none'; Codehighlighter1_951_1010_Closed_Image.style.display='inline'; Codehighlighter1_951_1010_Closed_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_951_1010_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_951_1010_Closed_Text.style.display='none'; Codehighlighter1_951_1010_Open_Image.style.display='inline'; Codehighlighter1_951_1010_Open_Text.style.display='inline';" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif">        </span><span style="color: #0000ff">for</span><span style="color: #000000"> (</span><span style="color: #0000ff">int</span><span style="color: #000000"> i </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">0</span><span style="color: #000000">; i </span><span style="color: #000000"><</span><span style="color: #000000"> count; i</span><span style="color: #000000">++</span><span style="color: #000000">) </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_951_1010_Closed_Text"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_951_1010_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />            String str </span><span style="color: #000000">=</span><span style="color: #000000"> localList.get(i);<br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />            list.remove(str);<br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />        }</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />        print();<br /><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockEnd.gif" />    }</span></span></div>于indexä¸?åQŒæ‰€ä»¥str2ä¼?x¨¬)被删除åQ›ä½ å¯ä»¥è‡ªå·±åŽÀLލ½Ž—一下结果ã€?br />如何解决˜q™ä¸ªé—®é¢˜å‘¢ï¼Œ½W”者在上面¾l™å‡ºäº?¿Uæ–¹æ³•供大家参考,最后给å‡ÞZº†(ji¨£n)完整的代码ã€?br />*****************************************************************************<br /> <p><font face="Verdana">package com.lpx.collection;</font></p> <p><font face="Verdana">import java.util.ArrayList;<br />import java.util.List;</font></p> <p><font face="Verdana">public class TestArrayDeletion {</font></p> <p><font face="Verdana"> private List<String> list = null;<br /> public static String[] array = { "str0", "str1", "str2", "str3", "str4",<br />   "str5" };</font></p> <p><font face="Verdana"> public TestArrayDeletion() {<br />  super();<br />  list = new ArrayList<String>();<br /> }</font></p> <p><font face="Verdana"> /**<br />  * @param args<br />  */<br /> public static void main(String[] args) {<br />  TestArrayDeletion arrayDeletion = new TestArrayDeletion();<br />  arrayDeletion.initList();<br />  arrayDeletion.unSafeDeleteTopByCount(3);</font></p> <p><font face="Verdana">  arrayDeletion.initList();<br />  arrayDeletion.unSafeDeleteTopByCount(4);</font></p> <p><font face="Verdana">  arrayDeletion.initList();<br />  arrayDeletion.safeDeletionTopByCountMethod1(4);</font></p> <p><font face="Verdana">  arrayDeletion.initList();<br />  arrayDeletion.safeDeletionTopByCountMethod2(4);</font></p> <p><font face="Verdana">  arrayDeletion.initList();<br />  arrayDeletion.safeDeletionTopByCountMethod3(4);</font></p> <p><font face="Verdana">  arrayDeletion.initList();<br />  arrayDeletion.safeDeletionTopByCountMethod4(4);</font></p> <p><font face="Verdana"> }</font></p> <p><font face="Verdana"> private void initList() {<br />  list.clear();<br />  for (String str : array) {<br />   list.add(str);<br />  }<br /> }</font></p> <p><font face="Verdana"> private void print() {<br />  for (String str : list) {<br />   System.out.println(str);<br />  }<br /> }</font></p> <p><font face="Verdana"> private void unSafeDeleteTopByCount(int count) {<br />  System.out.println("*********unSafeDeleteTopByCount*********");<br />  try {<br />   for (int i = 0; i < count; i++) {<br />    list.remove(i);<br />   }<br />  } catch (Exception e) {<br />   e.printStackTrace();<br />  } finally {<br />   print();<br />  }<br /> }</font></p> <p><font face="Verdana"> private void safeDeletionTopByCountMethod1(int count) {<br />  System.out.println("*********safeDeletionTopByCountMethod1*********");<br />  for (int i = count - 1; i >= 0; i--) {<br />   list.remove(i);<br />  }<br />  print();<br /> }</font></p> <p><font face="Verdana"> private void safeDeletionTopByCountMethod2(int count) {<br />  System.out.println("*********safeDeletionTopByCountMethod2*********");<br />  for (int i = 0; i < count; i++) {<br />   list.remove(0);<br />  }<br />  print();<br /> }</font></p> <p><font face="Verdana"> private void safeDeletionTopByCountMethod3(int count) {<br />  System.out.println("*********safeDeletionTopByCountMethod3*********");<br />  List<String> localList = new ArrayList<String>();<br />  for (int i = 0; i < count; i++) {<br />   localList.add(list.get(i));<br />  }<br />  list.removeAll(localList);<br />  print();<br /> }</font></p> <p><font face="Verdana"> private void safeDeletionTopByCountMethod4(int count) {<br />  System.out.println("*********safeDeletionTopByCountMethod4*********");<br />  List<String> localList = new ArrayList<String>();<br />  localList.addAll(list);<br />  for (int i = 0; i < count; i++) {<br />   String str = localList.get(i);<br />   list.remove(str);<br />  }<br />  print();<br /> }<br />}<br /></font></p><img src ="http://www.aygfsteel.com/silvermyth/aggbug/351944.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/silvermyth/" target="_blank">Gavin Li</a> 2011-06-08 23:28 <a href="http://www.aygfsteel.com/silvermyth/articles/351944.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> Ö÷Õ¾Ö©Öë³ØÄ£°å£º <a href="http://" target="_blank">Îñ´¨</a>| <a href="http://" target="_blank">º£ÄÏÊ¡</a>| <a href="http://" target="_blank">µ¤¶«ÊÐ</a>| <a href="http://" target="_blank">¡×ÓÏØ</a>| <a href="http://" target="_blank">ãòÎ÷ÏØ</a>| <a href="http://" target="_blank">ÀñÈªÏØ</a>| <a href="http://" target="_blank">Æ½Ì¶ÏØ</a>| <a href="http://" target="_blank">ɳºÓÊÐ</a>| <a href="http://" target="_blank">È·É½ÏØ</a>| <a href="http://" target="_blank">¬ÁúÏØ</a>| <a href="http://" target="_blank">´óÆÒÏØ</a>| <a href="http://" target="_blank">Ï°Ë®ÏØ</a>| <a href="http://" target="_blank">¿µÂíÏØ</a>| <a href="http://" target="_blank">ÈÕ¿¦ÔòÊÐ</a>| <a href="http://" target="_blank">³à·åÊÐ</a>| <a href="http://" target="_blank">¶î¶û¹ÅÄÉÊÐ</a>| <a href="http://" target="_blank">ÊÕ²Ø</a>| <a href="http://" target="_blank">ÉÐÖ¾ÊÐ</a>| <a href="http://" target="_blank">Ä®ºÓÏØ</a>| <a href="http://" target="_blank">ËÕÄáÌØÓÒÆì</a>| <a href="http://" target="_blank">ÅíÔóÏØ</a>| <a href="http://" target="_blank">¼ÃÄþÊÐ</a>| <a href="http://" target="_blank">ÕÐÔ¶ÊÐ</a>| <a href="http://" target="_blank">°²ÑôÊÐ</a>| <a href="http://" target="_blank">Ñô¸ßÏØ</a>| <a href="http://" target="_blank">²ÊƱ</a>| <a href="http://" target="_blank">ÓÀÊ¤ÏØ</a>| <a href="http://" target="_blank">É̺ÓÏØ</a>| <a href="http://" target="_blank">Âí¹«ÊÐ</a>| <a href="http://" target="_blank">ÔÆÃÎÏØ</a>| <a href="http://" target="_blank">½»¿ÚÏØ</a>| <a href="http://" target="_blank">Èô¶û¸ÇÏØ</a>| <a href="http://" target="_blank">ÓÀÐÞÏØ</a>| <a href="http://" target="_blank">·¿É½Çø</a>| <a href="http://" target="_blank">À³ÎßÊÐ</a>| <a href="http://" target="_blank">´óÃûÏØ</a>| <a href="http://" target="_blank">ͼÃÇÊÐ</a>| <a href="http://" target="_blank">ÎÚ³ľÆëÊÐ</a>| <a href="http://" target="_blank">Ìï¶«ÏØ</a>| <a href="http://" target="_blank">¾°ºéÊÐ</a>| <a href="http://" target="_blank">Ñ­»¯</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>