Я возвращаю свое заявление. сумма не является победителем. Хотя это быстрее, когда список невелик. Но производительность значительно ухудшается при использовании больших списков.
>>> timeit.Timer(
'[item for sublist in l for item in sublist]',
'l=[[1, 2, 3], [4, 5, 6, 7, 8], [1, 2, 3, 4, 5, 6, 7]] * 10000'
).timeit(100)
2.0440959930419922
Версия суммы все еще работает более минуты, и она еще не завершила обработку!
Для средних списков:
>>> timeit.Timer(
'[item for sublist in l for item in sublist]',
'l=[[1, 2, 3], [4, 5, 6, 7, 8], [1, 2, 3, 4, 5, 6, 7]] * 10'
).timeit()
20.126545906066895
>>> timeit.Timer(
'reduce(lambda x,y: x+y,l)',
'l=[[1, 2, 3], [4, 5, 6, 7, 8], [1, 2, 3, 4, 5, 6, 7]] * 10'
).timeit()
22.242258071899414
>>> timeit.Timer(
'sum(l, [])',
'l=[[1, 2, 3], [4, 5, 6, 7, 8], [1, 2, 3, 4, 5, 6, 7]] * 10'
).timeit()
16.449732065200806
Использование небольших списков и timeit: number = 1000000
>>> timeit.Timer(
'[item for sublist in l for item in sublist]',
'l=[[1, 2, 3], [4, 5, 6, 7, 8], [1, 2, 3, 4, 5, 6, 7]]'
).timeit()
2.4598159790039062
>>> timeit.Timer(
'reduce(lambda x,y: x+y,l)',
'l=[[1, 2, 3], [4, 5, 6, 7, 8], [1, 2, 3, 4, 5, 6, 7]]'
).timeit()
1.5289170742034912
>>> timeit.Timer(
'sum(l, [])',
'l=[[1, 2, 3], [4, 5, 6, 7, 8], [1, 2, 3, 4, 5, 6, 7]]'
).timeit()
1.0598428249359131
Вы видели этот пример из книги Oreilly Swing, которая плавает по всему Интернету? Кажется, вы можете настроить каретку много.
http://www.java2s.com/Code/Java/Swing-JFC/Fanciercustomcaretclass.htm
возможно, есть три способа, которыми я могу воспроизвести Caret
и выбор в th JTextComponents
import java.awt.Color;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.DefaultCaret;
import javax.swing.text.DefaultHighlighter;
import javax.swing.text.Highlighter;
public class TextFieldExample extends JFrame {
private static final long serialVersionUID = 1L;
public TextFieldExample() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
JPanel panel = new JPanel();
JTextField tfield = new JTextField(10);
tfield.setText("default text");
final JTextField tfield2 = new JTextField(10);
tfield2.setText("default text");
tfield2.addFocusListener(new FocusListener() {
public void focusGained(FocusEvent fe) {
tfield2.setCaretPosition(tfield2.getDocument().getLength());
}
public void focusLost(FocusEvent fe) {
}
});
JTextField tfield3 = new JTextField(10);
tfield3.setText("default text");
tfield3.setCaret(new HighlightCaret());
panel.add(tfield);
panel.add(tfield2);
panel.add(tfield3);
add(panel);
pack();
setVisible(true);
}
class HighlightCaret extends DefaultCaret {
private final Highlighter.HighlightPainter unfocusedPainter =
new DefaultHighlighter.DefaultHighlightPainter(new Color(230, 230, 210));
private static final long serialVersionUID = 1L;
private boolean isFocused;
@Override
protected Highlighter.HighlightPainter getSelectionPainter() {
return isFocused ? super.getSelectionPainter() : unfocusedPainter;
}
@Override
public void setSelectionVisible(boolean hasFocus) {
if (hasFocus != isFocused) {
isFocused = hasFocus;
super.setSelectionVisible(false);
super.setSelectionVisible(true);
}
}
}
public static void main(String... args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
TextFieldExample textFieldExample = new TextFieldExample();
}
});
}
}
Возможно, это может помочь http://java-sl.com/tip_overwrite_mode.html