An ethernet switch has a number of ethernet ports, usually 10BaseT, 100BaseT, and 1000BaseT. A switch receives ethernet frames on every port and based on the destination MAC address, forwards them out another port. Switches of these type tend to be store-and-forward devices, receiving the entire frame and doing a lookup against the MAC table for destination ports.
The MAC table is updated on reception of packets from a source MAC address, for each MAC address an entry in that ports MAC forwarding table is added.
The quality of a switch usually depends on a number of factors.
Managed switches allow the administrator to use SNMP/Telnet/WWW/etc. to configure and monitor a particular switch. This enables fine tuning of the switches performance and bandwidth graphs to be generated for each port, etc.
The amount of bandwidth on the switch fabric dictates how much data can be switched in any one second. If data cannot be switched, it will be stored in a (small) buffer on the incoming port. If this buffer fulls up the packet is dropped.
If the switch is blocking packet due to high demand, the FIFO buffer on the incoming port may be used. The larger this buffer is - the less likely the packet is to be dropped.
This is not usually a problem, a ethernet MAC is 6 bytes, most switches claim 4k MAC addresses per port, this is only 24kB of RAM per port - the buffer size (up to multiple MB) is much more important.
Some high-end ventors implement SpanningTree on their managed switches to improve the fault tolerance on the network.
To improve performance, Layer3Switching is employed to reduce the size of the ethernet broadcast domain.